本备忘使用的服务器是阿里云的ECS,2核(vCPU) 4 GiB内存。操作系统为纯的Ubuntu 18.04,也是由阿里云提供的,Ubuntu 18.04 64位 UEFI版。Docker是什么?我的理解就是一种简单的虚拟机,最早用于Web程序的发布。其他更详细的解释,可以都都一下。本备忘使用的服务器是阿里云的ECS,2核(vCPU) 4 GiB内存。操作系统为纯的Ubuntu 18.04,也是由阿里云提供的,Ubuntu 18.04 64位 UEFI版。Docker是什么?我的理解就是一种简单的虚拟机,最早用于Web程序的发布。其他更详细的解释,可以都都一下。
一、Docker的自动安装
1、安装最新版本,使用官方安装脚本自动安装,这是最直接简单的方式:
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
执行正确会有如下所示:
下面是当前Docker的一些情况:
2、 查看docker,是不是安装好了:
systemctl status docker --no-pager
如果安装成功,会出现如下的界面:
3、 删除docker,天下万物,有安装就要有删除:
sudo systemctl stop docker
sudo apt-get purge docker-ce
sudo rm -rf /var/lib/docker
我们为什么学习删除命令,当然是为了学习后面的手工安装
二、Docker的手工安装
有自动安装的技术,就有手功安装的需求。在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库,之后您可以从仓库安装和更新 Docker 。
1、更新软件包:
sudo apt-get update
这是Linux的特点,每次安装前必做update
2、安装 apt 依赖包,用于通过HTTPS来获取仓库:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
3、添加Docker 的官方 GPG 密钥,可以是原始的,也可以是镜像的。两个选一个就可以,先来原汁原味的:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
中国科学技术大学镜像的:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - ``
4、设置稳定版仓库,还是有两种,可以是原始的,也可以是镜像的。两个选一个就可以,先来个原汁原味的:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
中国科学技术大学镜像的:
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
5、安装最新版本的 Docker Engine-Community 和 containerd:
sudo apt-get install docker-ce docker-ce-cli containerd.io
安好之后,可以用
systemctl status docker --no-pager
查看是否安正确。
三、Docker的简单命令
1、只要是软件,就有版本,第一条命令。docker version :显示 Docker 版本信息
docker version
如果执行正确,我这里会显示如下:
从这里我们或以看出Docker其实分为Client和Server,只是安装的时我们没有细分!
2、党说docker类似于“虚拟机”,那docker是如何取镜像?这就是第二条命令。docker pull:
docker pull ubuntu
输入的三个参数意义如下:
- docker: 是主命令,基本上的docker命令都要加上
- pull: 是子命令,取官方的镜像,下载到本地
- ubuntu: 是镜像的名字
如果执行正确,她会下最新的ubuntu镜像:
3、 我们下载的“虚拟机”,放什么地方?如何查看?这就是第三条命令:docker images。
docker images
查看下载的镜像,我们只下载了一个ubuntu,如何执行正确,会有如下界面:
- REPOSITORY: 表示镜像的仓库源
- TAG: 镜像的标签
- MAGE ID: 镜像ID
- CREATED: 镜像创建时间
- SIZE: 镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 18.04、15.10 等多个不同的版本,我们可以使用 REPOSITORY:TAG 来定义不同的镜像。
4、 我们完成了所有的准备工作,只为写第一个程序:Hello Docker。
docker run ubuntu /bin/echo "Hello Docker"
如果前面的工作是正确的,那我们可以得到:
- docker 是主命令,基本上的docker命令都要加上
- run 与前面的 docker 组合来运行一个容器
- ubuntu 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo “Hello Docker” 在启动的容器里执行的命令
5、这个“镜像”运行之后叫“容器”,那又如何查看这些容器呢?下面就介绍,下一个命令:docker ps -a
docker ps -a
我们来分析一下这条命令:
- docker 是主命令,基本上的docker命令都要加上
- ps 列出容器
- -a 显示所有的容器,包括未运行的
如果执行正确,那我们会得到如下结果:
输出详情介绍:
- CONTAINER ID: 容器 ID
- IMAGE: 使用的镜像
- COMMAND: 启动容器时运行的命令
- CREATED: 容器的创建时间
- STATUS: 容器状态 状态有7种:
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
- PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
- NAMES: 自动分配的容器名称
四、Docker的常见命令
1、上条命令都是一暂间就完成的,能不能,执行一条“长命令”?
docker run -i -t ubuntu /bin/bash
各个参数解析:
- -t: 在新容器内指定一个伪终端或终端
- -i : 允许你对容器内的标准输入 (STDIN) 进行交互
如果执行正确,我们会看到如下结果:
现在我们进入了这个“容器”之中,提示符表成了 root@af0e4374300b:/#
由于这个“容器”是最新的ubuntu,现论上版本不超过本属主机的版本。
我们可以通过 ls 命令查看容器里的内容,我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
2、前面是在前台运行程序,那么后台启动呢?当然也是可以的:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
参数 -d 表示这个容器是在后台运行的
如果执行成功,会有如下结果:
7116477a3a4ce44e4dc71ae3db99575411def09bb708f69aef8e7191a72474cb
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
但是非常不方便
3、首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:
docker ps
执行成功,会显示如下结果:
我们可以通过这个 7116477a3a4c 和 eloquent_black 来了解这个容器的执行情况。
4、在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker logs eloquent_black
执行成功,会显示如下结果:
在本例中 7116477a3a4c 和 eloquent_black 是等价的,docker logs 7116477a3a4c 结果是一样的
5、我们使用 docker stop 命令来停止容器:
docker stop eloquent_black
停止容器,要用点时间,可能要等几秒钟,或更加长,成功之后回显一个 eloquent_black
可以用 docker ps查看是不是,成功了。
6、停止的容器可以通过 docker restart 重启:
docker restart eloquent_black
重启感觉非常快,与服务类似
当然也可以用 docker ps查看是不是,成功了。
7、使用 docker exec 命令,可以安全进入或退出容器,而容器并不会停止:
docker exec -it eloquent_black /bin/bash
注意一定要加 -it 和要执行的程序 /bin/bash
exit就可以退出这个容器,如果执行正确,可以得到下图:
可以看出docker做得非常完美,一个多的进程也没有!