03 : docker

docker 容器常见操作

1: docker的容器管理命令详解:

docker run -d -p 80:80 nginx:latest
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v 源地址(宿主机):目标地址(容器)
nginx:latest docker镜像的名字,最后一个版本

运行一个centos,并进入容器终端:
docker search centos 找到官方的centos镜像
docker pull centos
docker run -it --name centos centos /bin/bash
-it 分配交互式的终端
--name 指定容器的名字
/bin/bash 进入容易后执行的命令,覆盖容器的初始命令

运行后进入容器镜像终端:
[root@4b3716037b2b /]# hostname -I
172.17.0.2
[root@4b3716037b2b /]# exit #退出容器即销毁
临时退出容器不销毁方法:ctrl + p 然后松开,再按住ctrl +q


查看容器列表
docker ps #docker container ps (正在运行的容器)
docker ps -a #docker container ps -a (所有运行过的容器,包括已经退出的)
docker ps --no-trunc 显示全部,长格式显示

[root@k8s129 ~]# docker run -d centos sleep 10 (使用后台方式启动容器,并直接一个命令sleep 10)
651d87d5be24cca4f7a37a25f8d87266b9e8a8b4bcf724106d55bb2c4b030da9
[root@k8s129 ~]# docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
651d87d5be24 centos "sleep 10" 8 seconds ago Up 7 seconds compassionate_lumiere
4b3716037b2b centos "/bin/bash" 14 minutes ago Exited (0) 12 minutes ago centos
742f43349c54 nginx "nginx -g 'daemon of…" 13 hours ago Exited (0) 12 hours ago competent_allen
[root@k8s129 ~]# docker container ps -a (10S过后这个容器就会结束退出了。)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
651d87d5be24 centos "sleep 10" 2 minutes ago Exited (0) 2 minutes ago compassionate_lumiere
4b3716037b2b centos "/bin/bash" 17 minutes ago Exited (0) 15 minutes ago centos
742f43349c54 nginx "nginx -g 'daemon of…" 13 hours ago Exited (0) 12 hours ago competent_allen
[root@k8s129 ~]# docker run -d centos (不指定,默认执行镜像制作时候指定的进程命令,比如centos镜像是/bin.bash , nginx镜像是nginx -g `daemon of.....`)

正常停止容器:
docker stop CONTAINER_ID或者NAMES

[root@k8s129 ~]# docker ps (查看CONTAINER_ID或者NAMES)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1cbafd84c8b2 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 80/tcp relaxed_chaum
[root@k8s129 ~]# docker stop 1cbafd84c8b2 或者docker stop relaxed_chaum
relaxed_chaum
[root@k8s129 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k8s129 ~]#

强制杀死容器:
docker kill CONTAINER_ID或者NAMES

删除容器 # 只能删除已经退出的容器,正在运行的容易需要先停止,才能删除 或者加-f 选项强制删除,不建议
docker rm CONTAINER_ID或者NAMES
docker rmi 是删除镜像,注意两者的区别
批量删除容器
docker rm -f `docker ps -a -q`#获取容器的ID号

注意:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

 

进入容器:
(目的,调试,排错)

方法1:docker exec (会分配一个新的终端tty)
docker exec -it 容器id或容器名字 /bin/bash

[root@k8s129 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e067cb3fe22a centos "/bin/bash" 4 minutes ago Up 4 minutes heuristic_archimedes
[root@k8s129 ~]# docker exec -it e067cb3fe22a /bin/bash (分配一个新的终端进入容器)
[root@e067cb3fe22a /]# exit # ctrl + p 然后松开 在安装ctrl +q
这两种方式退出,都不会停止容器,因为原终端还在运行。只是把新分配的终端退出了。

方法2:docker attach(使用的是同一个终端,弃用了解就好,使用方法1 exec进入。)
docker attach [OPTIONS] CONTAINER
只能使用ctrl + p 然后松开 在安装ctrl +q退出容器,如果使用exit会直接销毁容器。


2: docker容器的网络访问
指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口)
-p hostPort:containerPort:udp
-p 81:80 –p 443:443 可以指定多个-p
大 P 宿主机随机端口映射到容器端口:
docker run -d -P nginx:latest

3:docker的数据卷管理

数据卷(文件或目录)
-v src(创建的卷目录):dst(容器的目录)
-v src(宿主机的目录): dst(容器的目录)
第一种:把容器里面的文件,拷贝到卷中
第二种:把宿主机的目录,挂载到容器的目录中

第一种用法:
[root@k8s129 ~]# docker volume create xujin #创建一个卷
xujin
[root@k8s129 ~]# docker volume ls # 查看
DRIVER VOLUME NAME
local xujin
[root@k8s129 ~]# docker volume inspect xujin # 查看卷存放的位置
[
{
"CreatedAt": "2019-10-20T18:28:22+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/xujin/_data",
"Name": "xujin",
"Options": {},
"Scope": "local"
}
]
#把刚才创建的xujin卷,挂到nginx 容器的数据目录下面(/usr/share/nginx/html)。
[root@k8s129 ~]# docker run -d -p 80:80 -v xujin:/usr/share/nginx/html nginx
9e9fb65dc865b2decfc57d85c622832554bcb1aa4fbabe7018c013c2c7c7becb
[root@k8s129 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e9fb65dc865 nginx "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp cocky_burnell
[root@k8s129 _data]# cd /var/lib/docker/volumes/xujin/_data/
[root@k8s129 _data]# ls
50x.html index.html
[root@k8s129 _data]# echo "我是新创建的xujin卷" >index.html #网页访问就会是我们刚才指定的内容了

第二种:
[root@k8s129 tools]# docker rm -f `docker ps -a -q` #删除所有容器
9e9fb65dc865
#启动nginx ,把本地的/tools目录(这个目录下面创建一个index.html文件)挂到nginx容器的/usr/share/nginx/html下
[root@k8s129 tools]# docker run -d -p 80:80 -v /tools/:/usr/share/nginx/html nginx
0a6b60ac3ec81aab2600fa68459a20cfc4e485beb2fc7cb88ecbe665add84f62
[root@k8s129 tools]#

思路扩展:指定多个IP端口映射,挂载多个目录。
docker run -d -p 80:80 -p 81:81  -v /tools/xiaoniao.conf:/etc/nginx/conf/  -v  /tools/:/usr/share/nginx/html nginx

原文地址:https://www.cnblogs.com/jim-xu/p/11708615.html