Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
Docker是供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。使用容器来部署应用程序称为容器化。容器不是新的,但用于轻松部署应用程序的容器却是新的。
容器化越来越受欢迎,因为容器是:
Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。
1、环境准备
1、需要Linux基础
2、Centos7
3、使用Xshell远程连接服务器
2、查看服务器版本
# 系统内核必须在3.10以上
[root@bogon ~]# uname -r
3.10.0-693.el7.x86_64
# 查看系统配置
[root@bogon /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
DockerAPI手册:https://docs.docker.com/
# 卸载旧的docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
您可以根据需要以不同的方式安装Docker Engine:
在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。
安装yum-utils
软件包(提供yum-config-manager
实用程序)并设置稳定的存储库。
# 下载需要的安装包
$ sudo yum install -y yum-utils
# 设置镜像地址
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #默认使用国外镜像地址
#设置国内阿里云镜像地址
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装之前先进行跟新yum
yum makecache fast
# 安装docker引擎 docker-ce 社区版本 docker-ee/docker-ee-eli 企业版
$ sudo yum install docker-ce docker-ce-cli containerd.io
在安装之前最好跟新一下yum软件指令
要安装特定版本的Docker Engine,请在存储库中列出可用版本,然后选择并安装:
一个。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
# VERSION_STRING 版本指定安装
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 启动docker
$ sudo systemctl start docker
查看docker启动
$ sudo docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
Go version: go1.10.3
Git commit: 4ef4b30/1.13.1
Built: Tue Jan 21 17:16:25 2020
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
Go version: go1.10.3
Git commit: 4ef4b30/1.13.1
Built: Tue Jan 21 17:16:25 2020
OS/Arch: linux/amd64
Experimental: false
在我们安装docker只有我们首先做的就是去测试一下我们的docker的helloword程序、在docker中启动一个镜像使用run命令即可。
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally # 没有找到hello-world:latest镜像
Trying to pull repository docker.io/library/hello-world ... #远程拉取镜像
latest: Pulling from docker.io/library/hello-world # 拉取地址
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for docker.io/hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
# 查看当前镜像
docker images
在我们不需要Docker的时候需要卸载、官方也给我们提供了最通许的方法
1、卸载Docker Engine,CLI和Containerd软件包:
$ sudo yum remove docker-ce docker-ce-cli containerd.io
2、主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
$ sudo rm -rf /var/lib/docker
3、配置加速器
1、CentOS的配置方式略微复杂,需要先将默认的配置文件(/lib/systemd/system/docker.service)
2、复制到 /etc/systemd/system/docker.service。
3、然后再将加速器地址添加到配置文件的启动命令中,之后重启Docker即可。
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon
--registry-mirror=|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd
--registry-mirror=|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart
4、docker配置镜像加速地址修改
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
$sudo mkdir -p /etc/docker
$sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["配置你的加速地址"]
}
EOF
$sudo systemctl daemon-reload
$sudo systemctl restart docker
5、查看是否配置成功
[root@bogon docker]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["配置你的加速地址"]
}
6、重新启动docker
# 重新启动服务
systemctl daemon-reload
# 重新启动docker
systemctl restart docker
我们在安装完成之后也进行了一个简单的测试。
HelloWord程序到底是怎么跑起来的呢?我们一起来分析一波。
我们在运行helloword程序的时候会报出一个Unable to find image
没有找到我们helloword程序、此时Docker会在本机寻找我们需要启动的镜像、docker会给出答复是否有这个镜像,如果有使用这个镜像运行,如果没有Docker就回去DockerHub仓库(默认国外慢、前面配置阿里云)、那么去下载的时候也会进行判断仓库中有没有、如果有那么就进行拉取进行到本地仓库中、添加到run程序中进行运行、如果没有就会报错Unable to find image
,大致Docker的流程就是这样的。
找不到镜像报错如下
docker run hebiyusheng
Unable to find image 'hebiyusheng:latest' locally
Trying to pull repository docker.io/library/hebiyusheng ...
/usr/bin/docker-current: repository docker.io/hebiyusheng not found:
does not exist or no pull access.
See '/usr/bin/docker-current run --help'.