引子
首次接触Docker
第一次知道Docker是从Kali的课堂上知道的,现在发现它很不错,值得学习
读者
没接触过Docker的运维人员,半运维人员,对Docker感兴趣的同学
环境
- Centos 7
- Docker 1.12
Docker 是什么 ?
Docker 是一个开源工具,它可以让创建和管理 Linux容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。
容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核。
Docker 的局限性之一是,它只能用在 64 位的操作系统上。
Docker 的一些理解
Docker 的镜像文件【images】是不能修改的,只读的
Docker 的架构是镜像叠加,所以镜像文件尽量不要有冗余操作
Docker 的容器是一个可读的镜像,是在镜像之上又架了一层可写的镜像,这个镜像经过修改,可以作为镜像出现
Docker 最让我觉得很好的地方是很多环境搭建变得简单了,然后也比较简洁
安装
1 | yum install docker |
启动Docker服务
旧语法1
2service docker start //启动Docker
chkconfig docker on // 配置开机启动
新语法1
2systemctl start docker.service //启动Docker
systemctl enable docker.service // 配置开机启动
下载Centos镜像文件
1 | docker pull centos //获取centos镜像 |
运行一个Docker容器
1 | docker run -i -t centos /bin/bash |
运行一个Docker容器,使用-i 捕获输入输出,-t 分配一个终端挥着控制台
断开容器的连接,输入exit
查看当前正在运行的容器列表
1 | docker ps |
进入当前正在运行的容器
exec 命令
docker exec 是Docker內建的命令。
1 | $ sudo docker run -idt ubuntu |
attach 命令
docker attach 亦是Docker內建的命令。
1 | $ sudo docker run -idt ubuntu |
按下 ctrl + P 然後 ctrl + Q 跳離容器,讓它繼續在背景執行。
但是使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作了。
nsenter 命令
安裝
nsenter 工具已含括在 util-linux 2.23 後的版本內。 如果系統中 util-linux 包沒有該命令,可以按照下面的方法從原始碼安裝。
1 | $ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24; |
使用
nsenter 可以存取另一個程式的命名空間。nsenter 要正常工作需要有 root 權限。 很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安裝最新版本的 util-linux(2.24)版,請按照以下步驟:
1 | $ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz |
為了連接到容器,你還需要找到容器的第一個程式的 PID,可以透過下面的命令取得。
1 | PID=$(docker inspect --format "{{ .State.Pid }}" <container>) |
透過這個 PID,就可以連接到這個容器:
1 | $ nsenter --target $PID --mount --uts --ipc --net --pid |
下面給出一個完整的例子。
1 | $ sudo docker run -idt ubuntu |
更簡單的,建議大家下載 .bashrc_docker,並將內容放到 .bashrc 中。
1 | $ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker; |
這個檔案中定義了很多方便使用 Docker 的命令,例如 docker-pid 可以取得某個容器的 PID;而 docker-enter 可以進入容器或直接在容器內執行命令。
1 | $ echo $(docker-pid <container>) |
更换Docker国内源
1 | curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://43049fd0.m.daocloud.io |
后续需要提高的地方
- Docker 更换源
- Docker 制作高品质的镜像文件
- 使用 Docker 仓库存储自己的镜像文件
- Docker 镜像升级
- docker-compose 配置