❤❤风吹向我吧❤❤
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一、安装docker
1、卸载旧版本
(旧版本被称为docker,或docker-engine)
$apt-get remove docker docker-engine containerd runc
在新主机上首次安装 Docker Engine 之前,需要设置 Docker 存储库。之后,可以从存储库安装和更新 Docker。
2、更新apt
更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库
$apt-get update
$apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
3、添加Docker官方的GPG密钥和公钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
4、设置稳定存储库
使用以下命令设置稳定存储库。要添加nightly或test存储库,请在以下命令中的单词后添加单词nightly或test(或两者)stable。
$ add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
5、更新apt包索引
安装最新版本的Docker Engine和containerd
$ apt-get update
$ apt-get install docker-ce docker-ce-cli containerd.io
6、运行并查看docker的状态
$ service docker start
$ service docker status
7、通过运行version 验证 Docker Engine 是否已正确安装
$docker version
二、创建和应用docker命令操作容器
1、启动
任务开始前,请确保容器服务已经启动
sudo service docker start //查看容器是否启动
(1)创建容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(exited)的容器重新启动。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。所需要的命令主要为 docker run。
例如,下面的命令输出一个 “Hello World”,之后终止容器。
$ docker run ubuntu:18.04 /bin/echo 'Hello world'
Hello world
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从 registry 下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
- 启动已终止容器
(2)启动已终止容器
可以利用 docker container start
命令,直接将一个已经终止(exited)的容器启动运行。容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps
或 top
来查看进程信息。
使用ps命令查看进程信息
可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。下面举两个例子来说明一下。如果不使用 -d 参数运行容器。
(3)运行容器
不使用 -d 参数运行容器,容器会把输出的结果 (STDOUT) 打印到宿主机上面
docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
如果使用了 -d 参数运行容器,此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。
docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
而容器是否会长久运行,是和 docker run
指定的命令有关,和 -d 参数无关。使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker container ls 命令来查看容器信息。
(4)查看容器信息
$ docker container ls
(5)获取容器的输出信息
docker container logs [container ID or NAMES] #执行时[container ID or NAMES]换成上面的id
当需要终止docker应用时,可以使用 docker container stop
来终止一个运行中的容器。此外,当 Docker 容器中指定的应用终结时,容器也自动终止。例如对于只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 docker container ls -a
命令看到。
(6)终止运行中的容器
终止状态的容器可以用 docker container ls -a 命令看到
处于终止状态的容器,可以通过 docker container start
命令来重新启动。此外,docker container restart
命令会将一个运行态的容器终止,然后再重新启动它。
(7)重新启动容器
(8)docker attach
命令
在使用 -d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,包括使用 docker attach
命令或 docker exec
命令。下面示例如何使用 docker attach
命令。
在一个新的容器中以后台模式(detached mode)运行一个Ubuntu镜像。
$ docker run -dit ubuntu
docker container ls
使用attach查看生成的文件
docker attach a328
(9)docker exec命令
另一个docker exec
与attach
不同的是,后边可以跟多个参数,这里主要说明 -i -t 参数。只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
docker run -dit ubuntu
docker container ls
docker exec -i d237 bash #d237是上面docker container ls中查看的id
进入命令模式,可以输入ls查看文件情况
如果从这个 stdin
中 exit
,不会导致容器的停止。因此更推荐大家使用 docker exec
。更多参数说明请使用 docker exec --help
查看。 在一个容器需要迁移的时,docker提供导出命令,用于将当前运行的容器打包为镜像。
(10)导出容器
如果要导出本地某个容器,可以使用 docker export
命令。
$ docker container ls -a
$ docker export d237 > ubuntu.tar
这样将导出容器快照到本地文件。之后将文件导入新机器时,可以使用 docker import 从容器快照文件中再导入为镜像。
2、删除容器
使用 docker container rm 来删除一个处于终止状态的容器,有一个charming_ganguly
的容器终止状态,我们以此为例删除。
docker container rm charming_ganguly
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。用 docker container ls -a
命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。
docker container prune
3、启动一个允许用户进行交互的 bash 终端
下面的命令则启动一个 bash 终端,允许用户进行交互。
docker run -t -i ubuntu:18.04 /bin/bash
其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
在交互模式下,用户可以通过所创建的终端来输入命令,例如
ps > /root/test.txt
cat /root/test.txt
❤❤风吹向我吧❤❤