CentOS下DockerCE从安装部署到应用上线

2 篇文章 0 订阅
2 篇文章 0 订阅

前言

必读

示例安装时的环境如下:
系统版本:CentOS Linux release 7.8.2003 (Core)
本文使用dnf代替yum来进行安装包管理
至于为什么用dnf不用yum,主要是因为dnf在包管理这块比yum优秀。

安装dnf及相关插件

yum install dnf dnf-plugins-core dnf-plugin-config-manager -y

Docker CE安装

Step 1: 安装必要的一些系统工具

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

Step 2: 添加软件源信息

dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新源缓存

dnf clean all && dnf makecache

Step 4: 安装Docker-CE

安装最新版本

dnf -y install docker-ce

安装指定版本

官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。

修改源
vim /etc/yum.repos.d/docker-ee.repo

将[docker-ce-test]下方的enabled=0修改为enabled=1

查找版本
# yum list docker-ce.x86_64 --showduplicates | sort -r

将会看到类似如下信息:

[root@localhost yum.repos.d]# yum list docker-ce.x86_64 --showduplicates | sort -r
 * updates: ftp.sjtu.edu.cn
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
 * extras: ftp.sjtu.edu.cn
docker-ce.x86_64            3:19.03.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.12-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.12-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.11-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.10-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
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.3.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.2.ce-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
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
 * base: mirrors.aliyun.com
Available Packages
安装
dnf -y install docker-ce-版本

如:

dnf -y install docker-ce-17.03.2.ce-1.el7.centos

请注意查询时中间那列就是版本

Step 5: 开启Docker服务

service docker start

Step 6: 设置开机启动

dnf -y install docker-ce && service docker start && chkconfig docker on

step 7: 配置docker加速器

创建或修改 /etc/docker/daemon.json文件

阿里云,可参考https://cr.console.aliyun.com/cn-shanghai/instances/mirrors,阿里云提供了对应的命令

{
   "registry-mirrors": [
       "https://dkwyo9z1.mirror.aliyuncs.com"
  ]
}

腾讯云

{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}

加载配置并重新启动 Docker 服务

systemctl daemon-reload && systemctl restart docker

Step 8: 测试

docker run hello-world

您将看到如下输出信息,代表测试通过,docker的安装没有问题:

[root@localhost docker]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete                                                                                                                                                                                                                  Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for 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/

[root@localhost docker]#

安装应用环境

必读

镜像仓库:https://hub.docker.com/

安装nginx

点击前往nginx官网查看最新稳定版本

docker pull nginx:1.19.0

安装php-fpm

点击前往php官网查看最新稳定版本

docker pull php:7.4.7-fpm

安装mysql

点击前往MySQL官网查看最新稳定版本

docker pull mysql:8.0.20

安装redis

点击前往Redis官网查看最新稳定版本

docker pull redis:6.0.5

安装RabbitMQ

点击前往RabbitMQ官网查看最新稳定版本

docker pull rabbitmq:3.9.5

配置环境

查看现有docker镜像及版本

docker image ls

启动mysql容器

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123qweASD+ --name test_mysql mysql:8.0.20

参数说明:
-d让容器在后台运行
-p添加主机到容器的端口映射
-e设置环境变量,这里设置mysql的root用户的初始密码
-name容器的名称、只要求唯一性

启动php-fpm容器

docker run -d -v /var/nginx/www/html:/var/www/html -p 9000:9000 --link test_mysql:mysql --name test_php_fpm php:7.4.7-fpm

参数说明:
-d让容器在后台运行
-p添加主机到容器的端口映射
-v添加目录映射,主机上的/var/nginx/www/html映射到容器里面 的/var/www/html,如果主机没有这个目录就创建这个目录,或者映射别的目录,但是后面路径要统一
-name容器的名称、只要求唯一性
-link容器与另外一个容器建立联系,这样就可以在当前的容器去使用另一个容器里的服务

启动nginx容器

docker run -d -p 80:80 --name test_nginx -v /var/nginx/www/html:/var/www/html --link test_php_fpm:php --name test_nginx nginx:1.19.0

参数说明
-d让容器运行在后台
-p添加主机到容器的端口映射
-v添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意
-name容器的名称、只要求唯一性
-link容器与另外一个容器建立联系,这样就可以在当前的容器去使用另一个容器里的服务

安装php扩展

step1:登录php-fpm容器

通过以下命令查看CONTAINER ID容器ID

docker container ls

此时终端会列出已经安装到容器如下:

[root@localhost html]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
bc072250a56b        php:7.4.7-fpm       "docker-php-entrypoi…"   14 seconds ago      Up 13 seconds       0.0.0.0:9000->9000/tcp              test_php_fpm
a14f569a4d46        mysql:8.0.20        "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 33060/tcp   test_mysql
[root@localhost html]#

第一列即为CONTAINER ID容器ID,示例中我安装了2个镜像(php:7.4.7-fpm,mysql:8.0.20),我们需要登录的是php:7.4.7-fpm,通过查看,php:7.4.7-fpmCONTAINER IDbc072250a56b,容器的登录命令为:

docker exec -it CONTAINER ID /bin/bash

因此,通过以下命令即可登录示例中的php:7.4.7-fpm容器:

docker exec -it bc072250a56b /bin/bash

step2:安装需要的扩展

安装php官方扩展

官方扩展涵盖以下这些:
bcmath bz2 calendar ctype curl dba dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlrpc xmlwriter xsl zend_test zip
以上扩展可以通过登录php-fpm容器运行如下命令,进行安装:

docker-php-ext-install 插件名称

多个插件同时安装用空格隔开如:

docker-php-ext-install 插件名称1 插件名称2 插件名称3

比如我需要php-fpm容器支持mysql,那么我需要安装pdopdo_mysql mysqlndmysqli,一条命令同时安装这4个扩展就是:

docker-php-ext-install pdo pdo_mysql mysqlnd mysqli

安装php-redis扩展

登录php-fpm容器运行:

pecl install redis

运行过程有点慢,不用着急,稍等片刻。
出现如下信息:

root@bc072250a56b:/var/www/html# pecl install redis
downloading redis-5.2.2.tgz ...
Starting to download redis-5.2.2.tgz (251,629 bytes)
.....................................................done: 251,629 bytes
29 source files, building
running: phpize
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902
enable igbinary serializer support? [no] :
enable lzf compression support? [no] :
enable zstd compression support? [no] :

一直回车即可,成功安装后将看到如下终端输出:

#以上信息省略

Build complete.
Don't forget to run 'make test'.

running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2" install
Installing shared extensions:     /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib/php/extensions/no-debug-non-zts-20190902/
running: find "/tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2" | xargs ls -dils
101283173    0 drwxr-xr-x. 3 root root      17 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2
 67551581    0 drwxr-xr-x. 3 root root      19 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr
101283174    0 drwxr-xr-x. 3 root root      17 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local
    14124    0 drwxr-xr-x. 3 root root      17 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib
 34782891    0 drwxr-xr-x. 3 root root      24 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib/php
 67551582    0 drwxr-xr-x. 3 root root      39 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib/php/extensions
101283175    0 drwxr-xr-x. 2 root root      22 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib/php/extensions/no-debug-non-zts-20190902
101283176 3476 -rwxr-xr-x. 1 root root 3556344 Jun 24 07:59 /tmp/pear/temp/pear-build-defaultuserIQ8jvj/install-redis-5.2.2/usr/local/lib/php/extensions/no-debug-non-zts-20190902/redis.so

Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20190902/redis.so'
install ok: channel://pecl.php.net/redis-5.2.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=redis.so" to php.ini
root@bc072250a56b:/var/www/html#

接下来运行如下命令,启用redis支持

docker-php-ext-enable redis

通过如下命令你可以查看扩展是否已经安装成功:

php -m

运行后终端将会列出所有已经安装的扩展:

root@bc072250a56b:/var/www/html# docker-php-ext-enable redis
root@bc072250a56b:/var/www/html# php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

root@bc072250a56b:/var/www/html#

部署应用

由于docker下官方提供的nginx镜像去除了除nginx运行所需的命令以外的其他命令,因此直接登录容器配置默认情况下是不行的,因此我们需要通过宿主机进行配置,然后放到docker容器中,具体操作方法如下:

step1:查看nginx的CONTAINER ID容器ID

docker container ls

终端输出如下:

[root@localhost html]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
8b36d3d47fa3        nginx:1.19.0        "/docker-entrypoint.…"   52 minutes ago      Up 52 minutes       0.0.0.0:80->80/tcp                  test_nginx
bc072250a56b        php:7.4.7-fpm       "docker-php-entrypoi…"   About an hour ago   Up About an hour    0.0.0.0:9000->9000/tcp              test_php_fpm
a14f569a4d46        mysql:8.0.20        "docker-entrypoint.s…"   3 hours ago         Up 3 hours          0.0.0.0:3306->3306/tcp, 33060/tcp   test_mysql
[root@localhost html]#

根据上述信息可知,nginx的CONTAINER ID:8b36d3d47fa3

step2:复制docker中的默认配置到宿主机

docker cp 8b36d3d47fa3:/etc/nginx/conf.d/default.conf /opt/

step3:修改默认配置

vi /opt/default.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /var/www/html;                       #修改这里默认的路径
        index  index.html index.htmi index.php;     #这里加入添加php的方式
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        root           html;
        fastcgi_pass   bc072250a56b:9000;        #这里可以用容器ID,也可以用容器IP,都具备唯一性,建议用容器ID,本章示例中,php-fpm的容器ID为:bc072250a56b
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;      #修改这里的路径
        include        fastcgi_params;
    }
}

step4:导入默认配置

docker cp /opt/default.conf  8b36d3d47fa3:/etc/nginx/conf.d/default.conf

step5:重新加载nginx配置

登录nginx容器

docker exec -it 8b36d3d47fa3 /bin/bash

测试配置是否正常

nginx -t

加载配置

nginx -s reload

看到如下信息代表nginx配置加载成功:

root@8b36d3d47fa3:/# nginx -s reload
2020/06/24 09:14:36 [notice] 92#92: signal process started
root@8b36d3d47fa3:/#

真实项目部署案例:

待续……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值