docker基础

run 启动

-i  让终端保持打开状态

-t 启动一个tty

-name  起一个容器名

-h  指定主机名

-v  数据卷

-f 前台运行

-d 后台运行

查正在运行的容器  docker ps 

查所有容器 docker ps -a

查上一次运行的容器 docker ps -l

删除一个或多个容器 docker rm ContainerName   删除一个或多个镜像 docker rmi imagesname

查已经下载的镜像 docker images

启动一个镜像  docker run -it  docker.io/centos      即 docker run -it imagesname:TAG    默认TAG是latest       制定一个名字docker run -it --name zzx centos  一定要加--name不然认不出

-d后台启动一个容器 docker run -d -it --name zzx centos

停止正在运行的容器docker stop 600db9c1e60b(ContainerID下同)

启动一个已经停止的容器 docker start bc3a516241b2(start不能够再指定容器启动时运行的指令,如果没有前台进程start可能失败 一启动就退出)

进入一个在后台运行的容器 docker attach bc3a516241b2 (docker exec -it ContainerName /bin/sh)   括号里的用exit也不会真正退出容器继续后台运行,   用attach进入的用exit会退出容器必须用ctrl P Q退出才能继续后台运行

启动一个容器就会在/var/run/docker/libcontainerd下生成相应的文件   pid和sock文件也在这个目录

看一个容器的ps          docker top e06fbdd8e829

 新建的容器先  yum -y install epel-release tar

查看容器ip        docker inspect --format='{{.NetworkSettings.IPAddress}}' my_ng  (或者docker inspect 'name'|grep -w IPAddress)        查端口映射 docker port my_ng

已有的容器commit成images (只能提交正在运行的container,即通过docker ps可以看见的容器)    docker commit -m "installed nginx" -a "zzx" bc3a516241b2 nginx/centos

 docker commit -m "zzxgrafana" -a "zzx" 3ce856247302 zzx_grafana                   
sha256:325bd34d83ca438db16ef3f27d43fb8bde980db58070e40117f5a7a43746b14b
[root@my130 grafana-storage]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
zzx_grafana                    latest              325bd34d83ca        3 seconds ago        278 MB

[root@my130 docker]# ll /var/lib/docker/image/overlay2/imagedb/content/sha256/
total 44
-rw-------. 1 root root 3362 Mar 10 19:22 1dbe0e931976487e20e5cfb272087e08a9779c88fd5e9617ed7042dd9751ec26
-rw------- 1 root root 7314 Mar 11 21:05 325bd34d83ca438db16ef3f27d43fb8bde980db58070e40117f5a7a43746b14b
-rw------- 1 root root 7317 Mar 11 21:04 60e1c295d85ef1e8d4545d5c3599f5a539f7699e775c9ec9ed44c639309f3f30
-rw------- 1 root root 6491 Mar 10 22:28 7ae78dc7a81146e812f3391bb63f2016099b8730211ca17ac63540e7f2a90bb1
-rw------- 1 root root 6082 Mar 11 00:55 8d0b77430ee9669db866c65a04ae0e9a57c25c24c16d35c68cde7721821b3e00
-rw------- 1 root root 4416 Mar 10 22:24 eb12107075737019dce2d795dd82f5a72197eb3c64b2140392eaad3ba3b8a34e

 

获取容器PID

[root@nmserver-7 ~]# docker inspect --format "{{.State.Pid}}" mydk

3864

[root@nmserver-7 ~]# nsenter --target 3864 --mount --uts --ipc --net --pid     #根据pid进入容器   可根据这两行写一个脚本进入容器

 

 -v

映射目录到属主机中

[root@nmserver-7 _data]# docker run --name volumetest -h zzxv -it -v /zzxtest zzxng /bin/bash      #启动一个容器并映射  /zzxtest 到属主机中

[root@nmserver-7 _data]# docker inspect volumetest | grep -A 1 Source   # 查看映射的map
"Source": "/var/lib/docker/volumes/49925f2e0adf592f4336c85e737a17265c2ad11a3e333c50ea81fef1aa764543/_data",
"Destination": "/zzxtest",

 

docker inspect {{.Volumes}} volumetest 这句报错 没法用

指定目录映射

[root@nmserver-7 zzx]# docker run --name ysdir -it -p 1234:80 -v /root/zzx:/ngdir zzxng:001 /bin/bash    #映射属主机 /root/zzx到/ngdir

[root@nmserver-7 zzx]# docker run --name urCONTAINER -it --volumes-from CONTAINERname imageName    #创建一个容器cpcp  共享ysdir的映射目录  

DOCKER 给运行中的容器添加映射端口

方法1

1、获得容器IP

container_name 换成实际环境中的容器名

docker inspect `container_name` | grep IPAddress
  • 1

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
  • 1
  • 2

方法2

1.提交一个运行中的容器为镜像

docker commit containerid foo/live
  • 1

2.运行镜像并添加端口

docker run -d -p 8000:80  foo/live /bin/bash
posted on 2017-11-14 13:56  寒星12345678999  阅读(405)  评论(3编辑  收藏  举报