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

[经验分享] Docker 命令(二)

[复制链接]

尚未签到

发表于 2017-12-6 13:34:12 | 显示全部楼层 |阅读模式
Docker 入门
  启动docker



systemctl start docker
  帮助命令


  • docker --help
  • docker [Commands] --help   例:docker run --help

Docker镜像


  • 搜索镜像 docker search [镜像名字]
  • 获取镜像 docker pull [镜像名字]
  • 导入镜像 docker load --input [镜像包]
  • 导出镜像 docker save -o [镜像包] [镜像名字]
  • 查看镜像 docker images
  • 删除镜像 docker rmi [镜像ID]
  1、执行docker search centos 会从dockerhub上搜索镜像
   DSC0000.png
  2、如果线上服务器无法连接dockerhub网络,可以通过其它方式下载docker镜像包,如centos.tar
  执行命令docker load --input centos.tar 将镜像导入docker
   DSC0001.png
  除了input方式导入,还可以使用重定向导入  docker load < centos.tar

   DSC0002.png
  3、获取镜像 docker pull centos
  4、查看镜像 docker images
   DSC0003.png
  5、导出镜像 docker save -o centos.tar centos
  6、删除镜像 docker rmi 67591570dd29 (上图IMAGE ID)
   DSC0004.png
  备注:如果镜像已经创建了一个容器,那么将无法进行删除

Docker容器


  • 启动容器 docker run [参数选项] [镜像名称] [命令(可省略)]
  • 运行已停止容器 docker start
  • 停止容器 docker stop
  • 强制关闭容器 dokcer kill
  • 查看容器 docker ps
  • 进入容器 docker attach | docker exec | nsenter
  • 删除容器 docker rm
  • 获取容器元数据 docker inspect
  • 容器访问日志 docker logs
  1、启动容器 docker run --name mydocker -t -i centos /bin/bash


  • --name 名称,管理容器时可以通过ID或名称
  • -t 让docker分配一个伪终端
  • -i 让docker的标准输入打开{input}
  提示:最后的/bin/bash可以省略,但是最后一个如果不是命令,那就是镜像的名称。
  输入上方的命令之后会直接进入到容器里面
DSC0005.png

  exit退出
  备注:容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了。
            通过PID我们可以看出,容器中的PID=1的是/bin/bash,正常centos 7系统中PID为1的进程是/usr/lib/systemd/systemd
            简单理解,容器给进程做隔离使用,虚拟机给操作系统做隔离使用。
   DSC0006.png
  2、docker start mydocker 或 docker start f13d63fd6457 方式让容器运行
  3、查看容器 docker ps -a(运行和不运行的容器全部列出)
  docker ps -a -q  列出所有容器的docker id



[iyunv@linux-node1 ~]# docker ps -a -q
86c9a83d95be
8822c2f37e9e
8814cf80b424
96892a7bb67e
e9e4eed824dd
f807dc543291
f13d63fd6457
  4、进入容器 docker attach mydocker
  备注:这样进入容器的缺点就是如果在开一个窗口就会同步操作,类似于单用户模式(windows远程桌面)。
  生产场景是不使用docker attach的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面。



yum install util-linux -y
  我们通过nsenter就可以进入容器,但是nsenter是通过pid进入容器里,所以我们需要知道容器的pid。我们可以通过docker inspect来获取到pid。



[iyunv@linux-node1 ~]# docker start mydocker
mydocker
[iyunv@linux-node1 ~]# docker inspect -f "{{ .State.Pid }}" mydocker
61864
[iyunv@linux-node1 ~]# nsenter -t 61864 -m -u -i -n -p

  nsenter --help 帮助命令


  • -m, –-mount参数是进去到mount namespace中
  • -u, –-uts参数是进入到uts namespace中
  • -i, –-ipc参数是进入到System V IPC namaspace中
  • -n, –-net参数是进入到network namespace中
  • -p, –-pid参数是进入到pid namespace中
  • -U, –-user参数是进入到user namespace中
  • -t,--target参数是获取名字空间的目标进程
   DSC0007.png
  /bin/bash是我们运行容器产生的进程
  -bash 是我们使用nsenter产生的,这样如果我们退出容器,容器就不会退出,因为/bin/bash还在运行



[iyunv@f13d63fd6457 /]# exit
logout
[iyunv@linux-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f13d63fd6457        centos              "/bin/bash"         52 minutes ago      Up 17 minutes                           mydocker
  脚本实现进入docker



[iyunv@linux-node1 ~]# cat docker_in.sh
#!/bin/bash
# Use nsenter to access docker
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
nsenter -t $PID -m -u -i -n -p
}
docker_in $1

  执行结果如下:



[iyunv@linux-node1 ~]# chmod +x docker_in.sh
[iyunv@linux-node1 ~]# ./docker_in.sh mydocker
[iyunv@f13d63fd6457 /]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  11768  1680 ?        Ss+  08:12   0:00 /bin/bash
root         45  0.0  0.0  15168  1884 ?        S    08:37   0:00 -bash
root         67  0.0  0.0  50844  1708 ?        R+   08:37   0:00 ps -aux

  5、docker exec不进入容器,但将命令发送容器里执行并获取返回结果



[iyunv@linux-node1 ~]# docker exec mydocker ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  11768  1680 ?        Ss+  08:12   0:00 /bin/bash
root         87  0.0  0.0  47440  1672 ?        Rs   08:42   0:00 ps -aux

  docker exec进入容器



[iyunv@linux-node1 ~]# docker exec -it mydocker /bin/bash
[iyunv@f13d63fd6457 /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  11768  1680 ?        Ss+  08:12   0:00 /bin/bash
root         91  0.0  0.0  11768  1888 ?        Ss   08:45   0:00 /bin/bash
root        103  0.0  0.0  47440  1672 ?        R+   08:46   0:00 ps aux

  它执行命令/bin/bash的PID是91
  6、删除容器 docker rm mydocker 或 docker rm -f mydocker
  docker另一种删除方式 ,启动一个容器完成命令后就删



[iyunv@linux-node1 ~]# docker run --rm centos /bin/echo "shhnwangjian"
shhnwangjian
[iyunv@linux-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f13d63fd6457        centos              "/bin/bash"         About an hour ago   Up 41 minutes                           mydocker

  可以在测试或学习时使用,退出时删除容器



[iyunv@linux-node1 ~]# docker run --rm --name test -it centos /bin/bash
[iyunv@9db1873a5b93 /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.6  0.0  11768  1880 ?        Ss   08:55   0:00 /bin/bash
root         13  0.0  0.0  47440  1668 ?        R+   08:55   0:00 ps aux
[iyunv@9db1873a5b93 /]# exit
exit
[iyunv@linux-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f13d63fd6457        centos              "/bin/bash"         About an hour ago   Up 43 minutes                           mydocker

  删除所有容器  docker rm $(docker ps -a -q)
  7、强制关闭所有运行容器
  docker kill $(docker ps -q)
  8、ngnix容器



[iyunv@linux-node1 ~]# docker pull nginx
[iyunv@linux-node1 ~]# docker run -d nginx
4acac5d79bb60c3ad3d8a7da59855c75279a866382939e10947e2802ab8a9072
[iyunv@linux-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4acac5d79bb6        nginx               "nginx -g 'daemon off"   23 seconds ago      Up 21 seconds       80/tcp, 443/tcp     goofy_jepsen
f13d63fd6457        centos              "/bin/bash"              2 hours ago         Up About an hour                        mydocker

  docker run -d 后台运行

运维网声明 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-421329-1-1.html 上篇帖子: Docker之Linux Cgroups 下篇帖子: Docker yum 安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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