第六章 九析带你轻松完爆 Docker - 容器篇

系列文章:


总目录索引:九析带你轻松完爆 Docker 系列

目录

1 前言

2 容器隔离

3 容器创建

4 容器操作

    4.1 登录容器

    4.2 执行容器命令

    4.3 复制文件到容器内部

    4.4 查看容器日志


1 前言

        如果你对博客有任何疑问,请告诉我。

1.png


2 容器隔离

        处于运行状态的 Docker 容器,其实就是一个受到隔离和资源限制的 Linux 进程,Docker 通过Linux Namespace 技术实现了容器隔离,本文先对 Linux Namespace 技术做一个简单的介绍。Linux Namespace 隔离类型分为:Cgroup、IPC、Network、Mount、PID、User、UTS,分别对进程的Cgroup root、进程间通信、网络、文件系统挂载点、进程 ID、用户和组、主机名域名进行隔离。下面以 PID Namespace 为例讲解一下容器隔离。

        启动一个容器:

docker run -it alpine:3.7 sh

        查看容器内 PID:

# 该命令在容器内执行

ps -ef

        执行结果:

spacer.gifclipboard2.png

        查看宿主机PID

# 该命令在宿主机执行

ps -ef | grep alpine

        执行结果:

clipboard3.pngspacer.gif

        在 Docker 容器启动时执行了 sh 命令,从上面的示例中可以看到,sh 命令在这个容器内部的 PID=1,而这个 Docker 容器在宿主机的 PID=3430,这就意味着,Docke r容器执行的 sh 命令,已经被 Docker 隔离在了一个跟宿主机无关的环境中,这就是 Docker 在启动一个容器时使用了 PID namespace。


3 容器创建

       容器创建通过执行 docker run 命令实现,docker run 命令参数较多,下面介绍几个常用的参数:

-d:容器在后台运行

-i -t:这两参数通常一起使用,容器运行在控制台

--name=<容器名>, 指定容器名,可以通过容器名对容器进行管理

-p <宿主机端口>:<容器内部端口>:将宿主机端口映射到容器内部端口,-p 参数可以配置多次,实现多个端口的映射

-v <宿主机目录或文件>:<容器内部目录或文件>:将宿主机目录或文件挂载到容器内部,-v 参数可以配置多次,实现多个目录或文件的挂载

-e <环境变量>:指定环境变量,容器中可以使用该环境变量

--restart=<重启策略>:指定容器停止后的重启策略,no 表示容器退出时不重启,on-failure 表示容器故障退出时重启,always 表示容器退出时总是重启

       下面给大家展示一个完整的 docker run 命令:

docker run -i -t --name=alpine -p 8080:80 -v /opt/data:/root -e "GOPATH=/opt/go" --restart="no" alpine:3.7 sh

         执行结果:

spacer.gifclipboard4.png

        本示例中,容器虽然做了端口映射,但因 alpine 镜像未暴露 80 端口,所以该端口映射为无效映射。在配置端口映射前,需要确认好容器内部暴露的端口情况,以及宿主机端口是否被占用。在进行目录挂载操作前,需要确认宿主机目录是否存在,如宿主机目录不存在,该挂载操作无效,当容器内部目录不存在时,目录会自动创建。

       使用 -i -t 参数启动的容器,会占用当前操作控制台,当前操作控制台退出后,容器也停止运行,所以在生产环境中,容器创建时一定要使用 -d 参数,确保容器在后台稳定运行。

       如果你只想一次性地执行容器内的命令,并不想真正的去启动容器,可以不加 -d -i -t 参数,直接执行容器创建命令。

docker run alpine:3.7 ls /

        执行结果:

spacer.gifclipboard5.png


4 容器操作

       容器运行后,可通过命令方式对容器进行操作,常见的容器操作有以下几种:登录容器、执行容器命令、复制文件到容器内部、查看容器日志。

4.1 登录容器

       登录容器使用 docker exec 命令。登录容器是为了通过控制台对容器进行操作,所以必须带 -i -t 参数。

docker exec -it centos /bin/bash

        当你登录客户端类的容器时,你可以通过 -e 参数设置容器环境变量,达到诸如用户切换、服务端变更等目的。

docker exec -it -e "GOPATH=/root/go" client /bin/bash

4.2 执行容器命令

         执行容器命令使用 docker exec 命令。通过 docker exec 执行容器命令跟通过 docker run 一样,都不需要带 -d -i -t 参数。

docker exec centos ls /

        当你需要在客户端类容器内执行命令时,也可以通过 -e 参数设置容器环境变量。

docker exec -e "GOPATH=/root/go" centos ls /

4.3 复制文件到容器内部

         容器启动后,有两种方式将宿主机文件复制到容器内部,一种是通过目录挂载,另外一种是通过 docker cp 命令。目录挂载方式存在一定的局限性,只能在容器创建时执行,如果容器已经处于运行状态,则只能通过 docker cp 命令进行复制。

docker cp /root/file1 centos:/root/

4.4 查看容器日志

         容器启动后,我们可以通过 docker logs 命令查看容器日志。

docker logs application

        如果我们需要对日志进行持续追踪,可以通过 docker logs -f 命令查看,效果与 tail -f 命令相同。

猜你喜欢

转载自blog.51cto.com/14625168/2475879