Docker

Docker 介绍

Docker 是一种快速构建, 运行和管理应用的工具, 帮助我们部署项目以及项目所依赖的各种组件.

Docker 是一个典型的运维工具.

后端开发人员往往也是需要参与开发以及测试环境的一些基础的部署的.

虚拟机是一种虚拟技术. Docker 容器技术也是一种虚拟技术.

Docker 是用 Go 语言开发的开源项目.

Docker 官网: https://www.docker.com/

官方文档地址: https://docs.docker.com/

仓库地址: https://hub.docker.com/

容器内的应用直接运行在宿主机的内核之上, 容器没有自己的内核, 也没有虚拟出硬件.

每一个容器都是互相隔离的, 每一个容器内都有一个属于自己的文件系统.


图 1 Docker 示意图

Docker 的安装

卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux

image

说明没有旧的需要卸载.

配置 Docker 的 yum 库

安装一个 yum 工具.

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

该命令执行失败:

image

尝试另一个命令:

yum install -y yum-utils

依然失败, 且相同报错:

image

主要报错:

Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

查阅了一些博客, 重点参考了: https://www.cnblogs.com/kohler21/p/18331060

执行的操作:

cd /etc/yum.repos.d

效果:

image

cp CentOS-Base.repo CentOS-Base.repo.backup
vi CentOS-Base.repo

将内容改为:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

保存并退出.

执行命令:

sudo yum clean all

效果:

image

sudo yum makecache

效果:

image

执行命令:

cd /etc/yum.repos.d
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

这三条指令的执行效果:

image

执行命令:

cat CentOS-Base.repo

效果:

image

输出的内容具体如下:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

再执行下面两条指令:

sudo yum clean all
sudo yum makecache

效果:

image

接下来接着安装 yum, 执行指令:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

效果:

image

看到最后有完毕二字, 说明这条指令执行成功了.

执行命令,配置 Docker 的 yum 源(阿里云源):

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

效果:

image

更新 yum,建立缓存:

sudo yum makecache fast

效果:

image

安装 Docker

执行命令,安装 Docker:

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

效果:

image

启动和校验

查看 Docker 版本:

docker -v

效果:

image

版本为:

Docker version 26.1.4, build 5650f9b

查看 Docker 镜像:

docker images

效果:

image

说明无法连接到 Docker 的守护进程.

Docker 本身也是一个服务, 需要启动起来并一直在这里, 服务启动起来之后, 我们输入的一切命令都是发送给这个进程, 由这个进程来处理我们输入的命令. 现在连不上意味着 Docker 还没有启动. 所以接下来要做的事情就是启动 Docker.

执行命令:

systemctl enable docker
systemctl start docker

然后再次执行:

docker images

效果:

image

说明当前还没有镜像.

命令解释:

# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

配置镜像加速

以后用 Docker 下载东西时, 默认是在国外, 所以要配置镜像加速. 可以是华为云, 腾讯云, 阿里云等等.

镜像地址可能会变更,如果失效可以百度找最新的 docker 镜像。

配置镜像步骤如下:

首先访问阿里云网站: https://www.aliyun.com/

注册一个账号。


图 1

图 2

图 3

第一条指令:

sudo mkdir -p /etc/docker

第二条命令:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://f7xqxlg7.mirror.aliyuncs.com"]
}
EOF

第三条命令:

sudo systemctl daemon-reload

第四条命令:

sudo systemctl restart docker

效果:


图 4

部署 MySQL

部署 MySQL

指令:

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql

一行命令比较长可以用 \ 换行显示.

报错:

image

检查发现自己的网络没有任何问题:

image

重点参考博客: https://www.cnblogs.com/liujunjun/p/18546650

首先进入 /etc/docker/daemon.json 文件:

image

文件内容为:

image

复制下面的内容:

{
"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

替换现在的内容.

Vim 全部删除: esc 状态下, 先按下 gg, 再按下 dG.

然后复制上面的内容.

将系统的内容粘贴到 Vim: Shift + Insert

然后然后在终端重新启动一下 Docker, 执行两条指令:

systemctl daemon-reload
systemctl restart docker

发生了启动失败的情况:

image

检查发现是刚才粘贴时不小心粘错了, 产生了语法错误:

image

重新粘贴了一遍, 执行这两条指令就成功了.

然后再执行部署 MySQL 的指令, 就部署成功了:

image

再部署一个 MySQL, 换了名称和端口:

docker run -d \
--name mysql2 \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql

很快就部署成功了, 这次不用再下载镜像了, 镜像只需要下载一次:

image

检查是否部署成功:

image

当我们利用 Docker 安装应用时,Docker 会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker 会在运行镜像时创建一个隔离环境,称为容器(container)。

镜像仓库:存储和管理镜像的平台,Docker 官方维护了一个公共仓库:Docker Hub。

命令解释

主机访问虚拟机成功:

image

image

主机无法访问 Docker 容器, 因为是隔离的:

image

image

指令:

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql

解释:

docker run :创建并运行一个容器,-d 是让容器在后台运行

--name mysql :给容器起个名字,必须唯一

-p 3306:3306 :设置端口映射

-e KEY=VALUE :是设置环境变量

mysql :指定运行的镜像的名字

镜像名称一般分两部分组成:[repository]: [tag]

其中 repository 就是镜像名.

tag 是镜像的版本.

在没有指定 tag 时,默认是 latest,代表最新版本的镜像.

image

Docker 常见命令

docker images

现在的镜像有:

image

docker rmi

删除镜像.

docker build

构建镜像.

docker save

保存镜像到本地为一个压缩文件.

docker load

加载镜像文件.

docker push

把镜像推到镜像仓库. 仓库可以是公用的或者公司内部的一个私服.

docker pull

从镜像仓库拉去镜像.

docker run

运行镜像. 如果发现镜像不存在, 就执行拉去操作然后再运行.

docker stop

停止容器的运行.

docker start

启动容器.

docker ps

查看容器的状态.

ps: process status, 进程状态.

docker rm

删除容器.

docker log

查看容器运行日志.

docker exec

执行一些命令进入容器的内部.

image

Docker 部署 Nginx

Interactive terminal: 可交互终端.

打开 KeXueShangWang, 进入 hub.docker.com.

image

image

image

image

image

image

image

image

image

image

image

posted @   有空  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示

目录导航