Docker学习之容器管理

一、容器管理

1、创建运行容器

命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
	OPTIONS选项的作用
选项描述
-i,-interactive交互式
-t, -tty分配一个伪终端
-d, -detach运行容器到后台
-e, -env设置环境变量
-P, -publish list发布容器端口到主机
-p, -publish-all发布容器所有EXPOSE的端口到宿主机随机端口
–name string指定容器名称
-h, -hostname设置容器主机名
–ip string指定容器IP,只能用于自定义网络
–network连接容器到一个网络
-v, -volume list; --mount mount(新方式)将文件系统附加到容器
–restart string容器退出时重启策略,默认no,可选值:[always / no-failure]
-m,–memory容器可以使用的最大内存
–memory-swap允许交换导磁盘的内存量
–memory-swappiness=<0-100>容器使用SWAP分区交换的百分比(0-100,-1默认)
–oom-kill-disable禁用oom killer
–cpus可以使用的CPU数量
-cpuset-cpus限制容器使用特定的CPU核心,入(0-3,0,1)
-cpu-sharesCPU共享(相对权重)
创建运行容器实例1:
	docker run -it -d centos
		说明:-i:交互;-t:分配伪终端;-d:后台启动

在这里插入图片描述

创建运行容器实例2:
启动centos镜像和nginx镜像间的对比
	docker run -d nginx      此命令后台启动的容器可以正常运行
	docker run -d centos      此命令后台启动的容器状态显示退出
	docker run -it -d nginx     此命令启动状态正常
	docker run -it -d centos     此命令启动状态正常

在这里插入图片描述

	原因是单独后台启动一个程序是含有进程可以使其正常运行,但单独后台启动操作系
	统没有进程支撑,所以单独后台启动centos的容器会退出,需要在启动时添加一个
	-t的伪终端。
创建运行容器实例3:
多参数创建运行容器:
	docker run -d -e env=www -p 808:80 --name web-test -h web --restart=always nginx
		说明:-e:向容器传递变量值;
		     -p:指定访问端口;
		     --name:指定创建容器的名称;
		     -h:指定创建的容器的主机名;
		     --restart=always: 设置为always后,当容器退出会自动将其拉起。
		     常用于docker主机重启或docker服务重启时将服务自动拉起。
		验证:

在这里插入图片描述
在这里插入图片描述

创建运行容器实例4:
创建启动容器时对内存及CPU做相对限制:
	docker run -d --cpus="1" -m="500m" nginx
		说明:--cpus:设置使用服务器的cpu数量;
		     -m:设置使用服务器内存最大量

在这里插入图片描述

2 其他容器管理命令

选项描述实例
ls列出容器docker container ls -a 列出所有容器 docker container ls -l 最后启动容器
inspect查看一个或多个的详细信息docker inspect nginx
exec在运行容器中执行命令docker exec -it nginx_test bash 进入容器 docker exec nginx_test ls 在容器中执行命令
commit创建一个新镜像来自一个容器docker commit 容器名/容器ID 镜像名
cp拷贝文件/文件夹到容器docker cp aaa.test web-test:/
logs获取一个容器日志docker logs web-test
port列出或指定容器端口映射docker port web-test
top显示一个容器运行的进程docker top web-test
stats显示容器资源使用统计docker stats web-test 交互式的 / docker stats --no-stream web-test 非交互式
stop/start/restart停止,启动,重启一个或多个容器docker stop/start/restart web-test
rm删除一个或多个容器docker rm unruffled_montalcini;-f:强制删除
prune移除已停止的容器docker container prune
export导出容器的文件系统docker export web-test -o www.tar
rename修改容器名称docker rename 旧容器名/ID 新容器名
ps查看容器docker ps [-a,-l,-q] ;-a:查看所有容器,-l:查看 最后启动容器,-q:只显示容器ID

3 容器数据的持久化

容器重启是不会丢失数据的,但是当删除容器后数据将会丢失,所以才会用到容器数据的持久化。
容器数据的持久化方式:将数据从宿主机挂载到容器中
	volumes: Docker 管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
	bind mounts: 将宿主机上的任意位置的文件或目录挂在到容器中。
实例1 通过bind mounts方式实现数据持久化
创建数据持久化示例的命令:
	docker  run -it -d  -p 808:80 -v /data/nginx/html:/usr/share/nginx/html --name web-test  nginx

实例验证步骤:
(1)创建数据目录:mkdir /data/nginx/html -p    (宿主机操作)
(2)先实现不持久化查看效果:docker  run -it -d  -p 808:80 --name web-test  nginx
(3)进入容器写入一个测试页面:docker exec -it web-test bash
		写入页面内容:echo "<h1>hello test </h1>" > /usr/share/nginx/html/index.html
		网页查看效果:

在这里插入图片描述

(4)重启容器查看效果:docker restart web-test
		内容依然在(篇幅原因不贴图了)
(5)删除容器再查看网页验证:
		docker rm -f web-test
		显示无法访问网站(篇幅原因不贴图)
(6)通过bind mounts方式挂在目录方式,宿主机目录:/data/nginx/html/,挂在到容器的/usr/share/nginx/html上,
	通过-v /data/nginx/html/:/usr/share/nginx/html   冒号前面宿主机目录,后面容器目录
	docker  run -it -d  -p 808:80 -v /data/nginx/html:/usr/share/nginx/html --name web-test  nginx
	通过网页查看效果后显示403,因宿主机目录上没有任何网页挂在后将会清空容器中目录的内容,所以不会显示nginx的欢迎页面
(7)进入容器写入自己的测试页面echo "<h1>hello test after monut </h1>" > /usr/share/nginx/html/index.html
	访问测试

在这里插入图片描述

(8)删除容器后访问测试:docker rm -f web-test
	访问后显示无法访问(篇幅问题不贴图)
(9)再重新创建:docker  run -it -d  -p 808:80 -v /data/nginx/html:/usr/share/nginx/html --name web-test  nginx
	并网页浏览是否内容丢失:

在这里插入图片描述

(10)再宿主机上修改网页内容浏览器查看是否会更改
		echo "<h1>after del test </h1>" >> /data/nginx/html/index.html

在这里插入图片描述

	说明挂载后在容器中修改和在宿主机上修改效果相同。
	一般容器挂载常用这种bind mounts方式
实例2 通过volumes方式挂载
(1)创建数据卷
	docker volume create nginx-ttt     创建数据卷
	docker volume ls
			DRIVER              VOLUME NAME
			local               nginx-ttt
	docker  volume inspect nginx-ttt   查看创建的数据卷的详细信息
			[
			    {
			        "CreatedAt": "2022-03-24T20:40:51+08:00",
			        "Driver": "local",
			        "Labels": {},
			        "Mountpoint": "/var/lib/docker/volumes/nginx-ttt/_data",
			        "Name": "nginx-ttt",
			        "Options": {},
			        "Scope": "local"
			    }
			]
(2)使用数据卷
	方式一:docker run -d --name nginx-s2test --mount src=nginx-ttt,dst=/usr/share/nginx/html -p 818:80 nginx
	方式二:docker run -d --name nginx-s3test -v nginx-ttt:/usr/share/nginx/html -p 828:80 nginx
	此种方式的测试方法与bind mount方式相同,访问网页测试即可,这里不详述。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐