Centos 中使用 Docker

什么是 Docker

Docker 是一种虚拟化容器技术,Errr…

比如以前我们要装个 Windows 系统,要先找一个系统光盘,通过电脑的 Boot 引导,一步步走安装流程,最后完成系统安装。之后系统就运行起来了,我们还要手动安装一些软件,比如微信,Chrome 浏览器等才能正常使用

而有了 Docker 之后,我们像安装软件一样安装它,之后通过 Docker Hub 镜像市场找我们感兴趣的镜像。比如我想在 Windows 上安装一个 Linux 系统下的软件,我找到这样的镜像,通过 Docker,可以秒级启动镜像,这样就能够快速使用镜像中的软件了

所以 Docker 解决了软件安装的痛点,并且运行在 Docker 容器中的镜像相互独立,一个容器挂了,不会影响到其他的容器

这个在服务器部署应用时很管用,如果采用本地安装的方式,那么当某个应用异常导致整个系统异常时(比如 Windows 上出现的蓝屏),其他的应用也无法正常提供服务,这就非常糟糕了

在 Linux CentOS 中安装 Docker

Docker 可以在 Windows,Mac,Linux 系统中安装,这里我们在 CentOS 下演示

Windows 中安装 CentOS 7
  1. 我们计划在 Virtual Box 虚拟机中安装 CentOS,首先下载 Virtual Box

https://www.virtualbox.org/

安装完毕,将它启动

  1. 下载 Vagrant,这是一个 Virtual Box 镜像工具

https://www.vagrantup.com/downloads.html

安装后需要重启电脑

  1. 寻找 CentOS 7 镜像

http://www.vagrantbox.es/

在这个网站里找一个 CentOS 的镜像地址,点击 Copy 进行复制

  1. 命令行安装

打开 Windows CMD,输入命令安装并启动镜像,下载过程需要一点时间

# 切换到想要存放镜像的目录
$ cd d:/centos7
# 添加镜像配置
$ vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
# 初始化镜像文件,注意这里的 centos7 必须跟上面镜像配置 vagrant box add 后的名字一致
$ vagrant init centos7
# 启动虚拟机,初次启动时会先下载镜像,消耗一定时间
$ vagrant up
  1. 连接虚拟机

镜像启动后在 Virtual Box 中可以看到启动状态

通过以下命令就可以连接到虚拟机

$ vagrant ssh
[vagrant@localhost ~]$

用超级管理员权限 sudo 执行命令不需要输入密码,如果出现提示要输入的话,密码是 vagrant

  1. 修改配置文件让虚拟机网络和主机网络互通

Notepad++ 文本编辑器打开镜像目录下的 Vagrantfile,将这一行的注释去掉,修改为

config.vm.network "private_network", ip: "192.168.56.10"

这里 ip 修改的依据,先在 CMD 中查看所有网络的地址,并找到如下的参数

$ ipconfig
...
以太网适配器 VirtualBox Host-Only Network:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::4bf9:1123:d5d7:4267%3
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1

配置文件中改为同一个网段的 ip 即可

修改完毕使用如下命令重启虚拟机,并让配置生效

$ vagrant reload

测试一下效果,假设主机 ip 是 192.168.70.10

从虚拟机上 ping 192.168.70.10,

从主机上 ping 192.168.56.10 (上面我们配置的 ip)

如果都是通的,表示网络配置成功,CentOS 7 我们就安装好了

  1. 修改系统语言为中文

在虚拟机中执行命令

[vagrant@localhost ~]$ export LANG="zh_CN.utf8"
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# echo 'LANG="zh_CN.utf8"' > /etc/locale.conf
[root@localhost ~]# exit

这样系统语言就修改为中文

CentOS 中安装 Docker 社区版
  1. 删除系统中的旧版本
$ sudo yum remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-engine
  1. 安装 Docker

命令执行过程中出现需要选择的时候 [y/N],全部填 y 并回车

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
     --add-repo \
     https://download.docker.com/linux/centos/docker-ce.repo
     
$ sudo yum install docker-ce docker-ce-cli containerd.io

如果执行过程失败,遇到这样的问题

Errno 14] HTTP Error 404 - Not Found
Trying other mirror.

说明 yum 的源缺少关键包,则需要更换源为阿里云的源,进行如下操作更换

# 备份旧的源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 添加EPEL
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 
yum clean all
yum makecache

操作成功之后再执行失败的命令就可以了

至此,Docker 安装完毕,参考官网

https://docs.docker.com/engine/install/centos/

  1. 启动 Docker
$ sudo systemctl start docker
# 查看 docker 版本
$ docker -v 
Docker version 19.03.8, build afacb8b
# 设置 docker 开机自启动
$ sudo systemctl enable docker

查看一下 Docker 中当前安装的镜像(没有安装,是空的)

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  1. 配置 Docker 镜像加速

由于 Docker HUB 官网在国外,下载镜像时比较慢,我们修改为国内的阿里云

在设置前,需要登录阿里云官网注册账号,然后从其控制台进入

在这里插入图片描述

​ 找到容器镜像服务

Centos 中使用 Docker_第1张图片

Centos 中使用 Docker_第2张图片

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://替换为你自己阿里云的地址.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

这样配置好以后,从 Docker HUB 中下载镜像时,就直接从国内阿里云下载,速度得到明显提高

示例,Docker 中安装 MySQL 镜像

进入 Docker HUB: https://hub.docker.com/

搜索 mysql,解读一下怎么用

像这样右上角标记了 OFFICIAL IMAGE 的,表示是官方出品

Centos 中使用 Docker_第3张图片

选择官方产品,进入这个页面,当我们要下载指定版本的话,找到 MySQL 的 TAGS,以及一个对应的版本,然后在命令中填写,不带版本号的命令下载的是最新版本,这里我们在虚拟机中下载 MySQL 5.7

[vagrant@localhost ~]$ sudo docker pull mysql:5.7
5.7: Pulling from library/mysql
...
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

事实上这个镜像是一个精简版的 Linux 系统,并安装了 MySQL

在启动之前,创建几个映射目录,什么意思呢,就是可以让主机和容器的映射目录数据自动同步

$ mkdir -p /mydata/mysql/log
$ mkdir -p /mydata/mysql/conf
$ mkdir -p /mydata/mysql/data

然后创建 MySQL 的配置文件

$ vi /mydata/mysql/conf/my.cnf
$ cat /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

现在我们将 MySQL 容器启动

[vagrant@localhost ~]$ sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
897c4ea7651f7fcfe7a5ef0ccae0cdad3acbd32c364a452fec88924f86d4af4b

显示一串字符,就表示启动成功了,解释一下参数的含义

-p 3306:3306 命令表示将主机的 3306 端口映射到 Docker 容器中的 3306 端口

--name 是给容器命名,之后关闭,删除,启动容器都可以用上

-v 参数表示将主机路径和容器路径进行映射

-e MYSQL_ROOT_PASSWORD=root 表示将 MySQL 密码设置为 root

-d 表示后台方式启动镜像 mysql,TAG 为 5.7

可以通过 ps 命令检查当前有哪些容器启动中

[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
897c4ea7651f        mysql:5.7           "docker-entrypoint.s…"   12 seconds ago      Up 11 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

通过以下命令进入容器的交互式 shell 环境,也即进入容器的 Linux 系统 shell 中

[vagrant@localhost ~]$ sudo docker exec -it mysql /bin/bash
root@51e669295c8b:/#

其中 mysql 是上一步 --name 设置的容器名

为了确认 MySQL 确实启动了,使用数据库工具 navicat 进行连接测试,MySQL 的用户名和密码都是 root

主机是我们之前步骤设置的虚拟机 ip,比如本文举例的是 192.168.56.10

测试连接通过

另外,当虚拟机重启之后,Docker 不会自动启动 MySQL 容器,执行下列命令可以让它自动启动

$ sudo docker update mysql --restart=always
提醒

如果要让 MySQL 能被局域网中的其他机器访问到,就要将虚拟机的网卡 1 设置为桥接模式,并配置上局域网的 IP

但就不能通过 Vagrant 去启动虚拟机了,因为它会根据 VagrantFile 中的配置又把虚拟机的网卡重置回去

手动配置好桥接模式,并在 Virtual Box 中启动,之后按如下方式设置一个固定 IP

# 临时设置 IP
$ ifconfig eth0 192.168.70.168

# 永久设置 IP
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.70.168
NETMASK=255.255.254.0
GATEWAY=92.168.71.255
DNS1=192.168.67.231
DNS2=192.168.4.231

# 重启网卡
$ service network restart

你可能感兴趣的:(测试开发之【开发】,docker)