【必读】容器管理技巧大揭秘!快速创建、启动和管理容器,让你的任务事半功倍!

容器管理

上篇已经讲解了从docker hub上下载镜像,类似与下载了系统iso文件保存到本地。现在可以使用镜像运行一个容器并使其运行指定任务了。容器技术基于操作系统层面上的虚拟化技术,通过将应用和其依赖项打包成独立的容器来实现资源隔离。

容器的创建

创建容器有以下两种方式。

  • docker create
# 创建一个容器,处在停止状态,需要手动允许
docker create -itd -p 80:80 --name nginx nginx
docker start nginx
  • docker run
# 命令基本格式
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

# 创建一个容器并启动,大致就是通过docker run 加上各自选项,最后配置容器使用哪个镜像进行创建即可。
docker run -itd --name nginx-test nginx

一般情况我们都是可以直接通过docker run命令,省去再手动启动的步骤。

docker run 常用参数列表:

参数 描述
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-P(小写), --publish-all=false, 指定容器暴露的端口,格式为宿主机端口:容器内部服务端口
-p(大写), --publish=[], 暴露容器内的公共端口,随机映射到宿主机端口,一般采用-p(小写)
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录,格式为:宿主机目录:容器内目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--dns=[], 指定容器的dns服务器
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
host 容器使用主机的网络container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 用于设置容器停止后是否重新启动以及何时重新启动。这个选项主要用于长期运行的服务类容器,有下面的几种策略
no: 容器退出时不重启
on-failure: 容器故障退出(返回值非零)时重启
always: 容器退出时总是重启
unless-stopped 只有在用户显式停止时才不会重新启动。

我常用的参数一般就几个就够了:

docker run -i -t -d --name=nginx -p 80:80 -v /opt:/opt -h nginx_test --restart=unless-stopped nginx:latest

# 上面命令指定开启容器的控制台运行后续通过docker exec 进入容器,然后指定容器名称为nginx,将容器内的80端口映射到宿主机的80端口,将容器内的/opt挂载到宿主机的/opt,还指定了容器内的主机名称nginx_test,最后说明使用nginx:latest标签这个镜像,如果本地存在直接使用,否则会自动从docker hun上进行下载。

查看容器配置

使用docker inspect 容器id查看,可以配合使用shell语法筛选,默认显示容器的所有信息,包括镜像使用,端口映射,目录挂载,启动命令等。

docker inspect nginx

查看容器

使用docker ps查看容器状态,包括运行中容器和停止的容器。

# 查看运行状态的容器
docker ps
# 查看所有容器包括停止状态
docker ps -a

查看日志

使用docker logs查看容器的日志,使用docker logs可以查看容器运行时的日志显示,后面跟着容器名称或者ID。

docker logs nginx

容器生存周期管理

# 启动容器,用于启动停止状态的容器
docker start nginx
# 停止容器
docker stop nginx
# 重启容器
docker restart nginx
# 删除容器,如果容器在运行状态需要先停止或者使用-f参数
docker rm nginx
# 删除所有停止的容器
docker rm $(docker ps -a -q)

容器文件目录复制

如果想要在容器里面使用宿主机的文件,一个是在容器内进行修改,但是一般情况容器会尽可能减少软件安装,保留最少得进程和服务,可能无法编辑等情况。因此可以使用docker cp可以进行宿主机和容器间的文件拷贝。

# 用法
[root@localhost keli]# docker cp --help

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# 示例
# 复制当前文件夹下的test.txt到容器的/mnt目录下
docker cp test.txt nginx:/mnt
# 复制nginx日志文件到当前目录下
docker cp nginx:/var/log/nginx/access.log .

进入容器内部

容器一般用于持久性服务作为后台进程使用,因此我们一般是不需要干预的,但是有时候可能需要手动执行一些操作,就可以使用docker exec进入容器内部进行操作了,docker 容器内部也是和linux系统类似又独立的应用和文件系统,也有类型宿主机的/目录和root用户、/home目录等。

# 配合docker run的参数进入容器
docker -it nginx /bin/bash
docker -it nginx /bin/sh
# 相当于开启了一个远程tty虚拟终端供我们进入配置,使用的bash或者sh命令行,关于bash与sh以后有机会再学习下,现在只需要知道可以通过这两个方式进入容器内部命令行模式即可。
# 退出容器
exit

本文由 mdnice 多平台发布

你可能感兴趣的:(程序人生)