Docker学习4---容器管理
Docker容器管理
·
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-shares | CPU共享(相对权重) |
创建运行容器实例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方式相同,访问网页测试即可,这里不详述。
更多推荐
已为社区贡献1条内容
所有评论(0)