设为首页 收藏本站
查看: 947|回复: 0

[经验分享] docker操作

[复制链接]

尚未签到

发表于 2019-2-22 06:37:45 | 显示全部楼层 |阅读模式
  docker的常用命令
]# yum -y install docker   #安装docker
]# systemctl start docker   #启动docker
]# docker search centos     #网上搜索images
]# docker pull docker.io/centos   #网上下载镜像
]# docker images   #列出本地镜像   、
]# docker run -i -t centos /bin/bash  #运行一个镜像
]# docker ps -a   #列出本机上所有的容器
  需要root权限,不足的时候,报错
1. 容器的基本操作
启动容器(run命令)
  实例:
docker run --name web -p 9003:80 -p 9023:22 -d -v /src/webapp:/opt/webapp -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
  说明:
-p (小写的)使用格式 ip:hostPort:containerPort  
将本地的 9003 端口 映射到容器的端口 80x,查看用 docker port  
-v  将加载主机的/src/webapp目录到容器的/opt/webapp
-d, --detach=false Detachedmode: run command in the background
-i, --interactive=false Keep STDINopen even if not attached
-t, --tty=false Allocate apseudo-TTY
  ]# docker run -d -i --name web -v /src/webapp:/opt/webapp  docker.io/centos /bin/bash
2cf377fa8d0219678b95036ee1a28d2634c49ca30ff62f2896ad8e6ab5c0a37d
]# docker exec -i -t web /bin/bash
一个容器连接到另一个容器
  docker run -it --name sonar -d --link mmysql:db tpires/sonar-server
  sonar容器连接到mmysql容器,并将mmysql容器重命名为db。
这样,sonar容器就可以使用db的相关的环境变量了。
  这样在 容器sonar 内 查看 /etc/hosts文件的时候,发现增加一条记录,映射主机名到一条IP地址。
这样在容器sona内,就可以直接解析db了。
进入容器(exec attach命令)
  使用docker attach
使用SSH,不建议使用
使用nsenter
使用exec,使用较多
  ]# docker exec -it containerID /bin/bash
  ]# docker exec -it myTest /bin/sh
  ]# docker attach --sig-proxy=false   containerID
删除所有容器(rm命令)
  docker rm  $(docker ps -a -q)
  这个命令分两步,
docker ps -a  -q,以安静模式列出所有的容器,也就是只列出随机唯一名字(numericID)
docker rm ,依次(循环)删除列表中的容器,删除正在运行的,会报错。
docker rm -f ,强制删除
  docker stop
docker start
docker restart
docker kill  
docker ps -a     #查看所有容器
  还有三个与暂停相关的命令pause,unpause,wait
文件系统相关
  docker diff   查看容器内文件的改变
docker cp  在容器和主机之间复制文件
统计相关
  docker top 显示容器内进程信息
docker stats 显示容器内统计信息
docker port  显示容器与主机端口映射信息
docker inspect 显示容器底层细节
其他
  docker logs  -f    查看运行日志
docker logs     #获取容器的输出信息
docker rename       改名
容器的导入导出
  docker export -o   导出文件到tar包
docker import 导入成为镜像
#docker export mos > testrun.tar
#cat testrun.tar |docker import - test/cenosme
  [root@localhost ~]# docker run -d -i --name mos docker.io/centos /bin/bash
41aa9eb50a97fb2c4ac6c29ca4a9d77cb673787ab5a3e13e6d3f82014b0e9b0b
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              ff426288ea90        5 days ago          207.2 MB
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
41aa9eb50a97        docker.io/centos    "/bin/bash"         12 seconds ago      Up 11 seconds                           mos
[root@localhost ~]# docker export mos > testrun.tar
[root@localhost ~]# ls
anaconda-ks.cfg  install_salt.sh  testrun.tar  zookeeper-3.3.6.tar.gz
[root@localhost ~]# cat testrun.tar |docker import - test/cenosme
sha256:2d6416e6c649f14728b1d3e9a1b73ad1181b80f7359c9fbacdd39b6263b390f2
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/cenosme        latest              2d6416e6c649        7 seconds ago       207.2 MB
docker.io/centos    latest              ff426288ea90        5 days ago          207.2 MB
[root@localhost ~]#
2.镜像操作
删除所有镜像
  docker rmi   $(docker  images -q)
docker  images  -q 只列出了镜像的ID
docker  rmi 用于删除镜像
  docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
docker images | grep none | awk '{print$3}' | sort -r只列出untaggedimages,也就是镜像名字为的,取出ID,降序排列
  docker search  
docker history  
docker commit        #保存对容器的修改
docker build   
构建镜像
  三种方式 :基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建
1)  docker commit   
  2)  cat ubuntu-xxx.tar.gz | docker import -ubuntu:14.04
ubuntu-xxx.tar.gz  是一个操作系统模板文件
  3)   docker build  -t  
  如Dockerfile在当前路径:docker  build -t   xx/gitlab .
镜像迁移
  当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
  机器1:
  docker save  busybox > /home/save.tar
  使用scp将save.tar拷到    机器2上,然后:
  docker load < /home/save.tar
推拉镜像
  一、安装Registry:
  很简单,只需要运行一个Registry容器即可(包括下载镜像和启动容器、服务)
  docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry --restart=always registry
  二、使用Registry
  去除默认是需要https证书支持的.
  修改/etc/docker/daemon.json文件
  #vi /etc/docker/daemon.json
{ &quot;insecure-registries&quot;:[&quot;192.168.1.100:5000&quot;] }
#systemctl daemon-reload
#systemctl restart docker
注::Registry的机器ip地址,在安装registry的节点和客户端需要访问私有Registry的节点都需要执行此步操作。
三、通过 docker tag重命名镜像,使之与registry匹配
  docker tag inits/nginx1.8 192.168.1.100:5000/nginx1.8:latest
四、上传镜像到Registry
  docker push 192.168.1.100:5000/nginx1.8:latest
五、查看Registry中所有镜像信息
  curl http://192.168.1.100:5000/v2/_catalog
返回:
{&quot;repositories&quot;:[&quot;centos6.8&quot;,&quot;jenkins1.638&quot;,&quot;nginx&quot;,&quot;redis3.0&quot;,&quot;source2.0.3&quot;,&quot;zkdubbo&quot;]}
  六、其他Docker服务器下载镜像
需要先设置
#vi /etc/docker/daemon.json
{ &quot;insecure-registries&quot;:[&quot;192.168.1.100:5000&quot;] }
#systemctl daemon-reload
#systemctl restart docker
  docker pull 192.168.1.100:5000/nginx1.8:latest
  七、启动镜像
  docker run -it :5000/nginx1.8:latest /bin/bash
Dockerfile 命令
  Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。
  ADD
  ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。
  # Usage: ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder
CMD
  和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。
  # Usage 1: CMD application &quot;argument&quot;, &quot;argument&quot;, ..
CMD &quot;echo&quot; &quot;Hello docker!&quot;
ENTRYPOINT
  配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
  每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
  ENTRYPOINT 帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。
  # Usage: ENTRYPOINT application &quot;argument&quot;, &quot;argument&quot;, ..
# Remember: arguments are optional. They can be provided by CMD
# or during the creation of a container.
ENTRYPOINT echo
# Usage example with CMD:
# Arguments set with CMD can be overridden during run
CMD &quot;Hello docker!&quot;
ENTRYPOINT echo
ENV
  ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。
  # Usage: ENV key value
ENV SERVER_WORKS 4
  EXPOSE
  EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。
  # Usage: EXPOSE [port]
EXPOSE 8080
FROM
  FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。
  # Usage: FROM [image name]
FROM ubuntu
MAINTAINER
  我建议这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用于声明作者,并应该放在FROM的后面。
  # Usage: MAINTAINER [name]
MAINTAINER authors_name
RUN
  RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。
  # Usage: RUN [command]
RUN aptitude install -y riak
USER
  USER命令用于设置运行容器的UID。
  # Usage: USER [UID]
USER 751
VOLUME
  VOLUME命令用于让你的容器访问宿主机上的目录。
  # Usage: VOLUME [&quot;/dir_1&quot;, &quot;/dir_2&quot; ..]
VOLUME [&quot;/my_files&quot;]
WORKDIR
  WORKDIR命令用于设置CMD指明的命令的运行目录。
  # Usage: WORKDIR /path
WORKDIR ~/
如何使用Dockerfiles
  使用Dockerfiles和手工使用Docker Daemon运行命令一样简单。脚本运行后输出为新的镜像ID。
  # Build an image using the Dockerfile at current location
# Example: sudo docker build -t [name] .




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675432-1-1.html 上篇帖子: 22、《每天5分钟玩转Docker容器技术》学习 下篇帖子: docker_基础_4_监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表