Docker 学习笔记

Centos7 安装Docker CE

前言

Docker 提供了两个版本:社区版 (CE) 和企业版 (EE)。

Docker 社区版 (CE) 是开发人员和小型团队开始使用 Docker 并尝试使用基于容器的应用的理想之选。

本文介绍下Docker 社区版 (CE) 在CentOS 7系统中的里两种安装方式

安装前提

· 64 位版本的 CentOS 7

· CentOS 系统的内核版本高于 3.10(uname -r命令可查看系统内核版本)

安装 Docker CE

  1. 设置 Docker 的镜像仓库并从中进行安装
  2. 下载 RPM 软件包并手动进行安装(例如,在不能访问互联网的隔离系统中安装 Docker)

从镜像仓库安装

确保 yum 包更新到最新:

sudo yum update

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

· yum-utils 提供了 yum-config-manager 实用程序,用于设置yum源

· devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2

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

设置镜像仓库:

阿里云仓库地址(推荐)

sudo yum-config-manager \

 --add-repo \

 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

官方仓库地址

sudo yum-config-manager \

 --add-repo \

 https://download.docker.com/linux/centos/docker-ce.repo

更新 yum 软件包索引。

sudo yum makecache fast

查看仓库中所有docker版本

sudo yum list docker-ce --showduplicates | sort -r

安装 Docker CE 最新版本

sudo yum install docker-ce 

安装 Docker-ce 指定版本

sudo yum install docker-ce-版本号

sudo yum -y install docker-ce-18.03.1.ce-1.el7.centos

启动 Docker

sudo systemctl start docker    #启动

sudo systemctl restart docker  #重启

sudo systemctl enable docker   #加入开机启动

Docker 版本信息查看

sudo docker version

网易镜像源

编辑/etc/docker/daemon.json(如果不存在则创建):

vi /etc/**docker**/daemon.json   #内容如下

{
"registry-mirrors":[
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"http://registry.docker-cn.com"
] ,
"insecure-registries":[
"docker.mirrors.ustc.edu.cn",
"registry.docker-cn.com"
]
}

重启Docker服务

sudo systemctl restart docker

配置加速器

访问该地址获取配置加速脚本https://www.daocloud.io/mirror

直接执行该脚本,重启docker服务 systemctl restart docker,之后下载容器得到加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

Docker 部署lnmp

关闭防火墙、关闭selinux

[root@docker-server ~]# setenforce 0
[root@docker-server ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g'  /etc/selinux/config   //永久关闭selinux
[root@docker-server ~]# systemctl stop firewalld
[root@docker-server ~]# systemctl disable firewalld    //开机不启动防火墙

下载所需要的镜像 (nginx 1.12.2 ,mysql 5.7,php 7.2) 版本可自选

获取 Mysql 5.7 镜像

[root@docker-server ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
5e6ec7f28fb7: Pull complete 
4140e62498e1: Pull complete 
e7bc612618a0: Pull complete 
1af808cf1124: Pull complete 
.....

启动容器 cs_mysql

[root@docker-server ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xiaoqiu --name cs_mysql mysql:5.7

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

获取php 7.2镜像

[root@docker-server ~]# docker pull php:7.2-fpm
7.2-fpm: Pulling from library/php
5e6ec7f28fb7: Already exists 
cf165947b5b7: Pull complete 
7bd37682846d: Pull complete 
.....

启动php 容器

[root@docker-server ~]# docker run -d -v /var/nginx/www/html:/var/www/html -p 9000:9000 --link cs_mysql:mysql --name cs_phpfpm php:7.2-fpm

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

测试目录映射
在主机/var/nginx/www/html 目录下创建php测试页面,会直接映射到容器里面

[root@docker-server ~]# cat /var/nginx/www/html/index.php 
<?
	phpinfo();
?>

//看直接映射到了容器内部了

[root@docker-server ~]# docker exec -it 92fc30be9a85 /bin/bash   //进入到php的容器里面了
root@92fc30be9a85:/var/www/html# ls  
index.php

php的扩展安装

安装php-redis

root@92fc30be9a85:~# pecl install redis && docker-php-ext-enable redis
downloading redis-4.2.0.tgz ...
Starting to download redis-4.2.0.tgz (235,569 bytes)
.................................................done: 235,569 bytes
25 source files, building
running: phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
enable igbinary serializer support? [no] :          //no  或者空格都可以
enable lzf compression support? [no] : 
building in /tmp/pear/temp/pear-build-defaultuserJI3qgU/redis-4.2.0
running: /tmp/pear/temp/redis/configure --with-php-config=/usr/local/bin/php-config --enable-redis-igbinary=no --enable-redis-lzf=no
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking whether the C compiler works... yes
......此处省略

安装后执行 php -m //查看安装了那些

root@92fc30be9a85:~# php -m
[PHP Modules]
.。...此处省略
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
redis                         //这就是安装的redis
Reflection

获取Nginx 1.12.2镜像

[root@docker-server ~]# docker pull nginx:1.12.2
1.12.2: Pulling from library/nginx
f2aa67a397c4: Pull complete 
e3eaf3d87fe0: Pull complete 
38cb13c1e4c9: Pull complete 
Digest: sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
Status: Downloaded newer image for nginx:1.12.2

启动Nginx容器

[root@docker-server ~]# docker run -d -p 80:80 --name cs_nginx -v /var/nginx/www/html:/var/www/html --link cs_phpfpm:phpfpm --name cs_nginx nginx:1.12.2

参数说明
-d 让容器运行在后台
-p 添加主机到容器的端口映射
-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意
-name 容器的名称
-link 容器之间建立起来联系

修改Nginx 的配置文件

使他支持php ,方式有多种,这里我直接拷贝出配置文件修改在导进去即可

[root@docker-server opt]# docker cp 2a8e910b40db:/etc/nginx/conf.d/default.conf /opt/
[root@docker-server opt]# cat 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   92fc30be9a85:9000;        //这里可以用容器ID,也可以用容器IP,都具备唯一性
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;      //修改这里的路径
        include        fastcgi_params;
    }
}

修改完毕导入配置文件到Nginx 容器里面

[root@docker-server opt]# docker cp default.conf  2a8e910b40db:/etc/nginx/conf.d/default.conf

进入到容器里面重新加载配置文件

[root@docker-server ~]# docker exec -it 2a8e910b40db /bin/bash
root@2a8e910b40db:/# nginx -t             Nginx检测配置文件是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@2a8e910b40db:/# nginx -s reload
2019/02/02 15:56:49 [notice] 24#24: signal process started

参数说明
-t 在容器里面生产一个伪终端
-i 对容器内的标准输入(STDIN)进行交互

查看所有容器映射的端口

[root@docker-server opt]# ss -anlt           注:容器映射的端口可以修改的
State       Recv-Q Send-Q                       Local Address:Port                                      Peer Address:Port              
LISTEN      0      128                                      *:22                                                   *:*                  
LISTEN      0      100                              127.0.0.1:25                                                   *:*                  
LISTEN      0      128                                     :::80                                                  :::*                  
LISTEN      0      128                                     :::22                                                  :::*                  
LISTEN      0      100                                    ::1:25                                                  :::*                  
LISTEN      0      128                                     :::9000                                                :::*                  
LISTEN      0      128                                     :::3306                                                :::*   

访问浏览器测试
看到这个页面说明搭建成功了!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2a4TM0vY-1625105671225)(F:\1.文档 学习教程 笔记\0.笔记\MD笔记\src\php-web.png)]

docker-compose的安装

官方链接

https://docs.docker.com/compose/install/

下载源

非官方源(推荐):

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose

几乎秒下载完

官方源(不推荐,因为国内速度会特别慢)

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋权:

sudo chmod +x /usr/local/bin/docker-compose

创建软连接

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看成功没有:

docker-compose --version

或者

docker-compose version

如果出现版本号,即安装成功了

docker-compose version 1.27.4, build 40524192
但如果出现 docker-compose 未识别命令

3.其它
如果还是提示不识别,那么安装以下扩展源试试

安装扩展源

sudo yum -y install epel-release

安装python-pip模块

sudo yum install python-pip

卸载:

sudo rm /usr/local/bin/docker-compose

docker-harbor2.2.1安装

下载harbor离线安装包

wget https://github.com/goharbor/harbor/releases/download/v2.2.1/harbor-offline-installer-v2.2.1.tgz

GitHub 下载文件加速

https://shrill-pond-3e81.hunsh.workers.dev/

修改相关配置

tar -zxvf harbor-offline-installer-v2.2.1.tgz
cd harbor
cp harbor.yml.tmpl  harbor.yml
vim harbor.yml
#我这里只修改了两个参数,注释了https相关配置,内部用http和https无所谓了,其他的使用默认参数
hostname: 10.1.31.155    #harbor访问地址
harbor_admin_password: xiaoqiu     #harbor访问密码

拉取镜像、启动容器

[root@localhost]#./prepare   #离线安装不执行
[root@localhost]# ./install.sh 
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registryctl   ... done
Creating registry      ... done
Creating harbor-portal ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----
[root@localhost]# docker container ls    #可以看到各种组件都启动了

web端打开harbor界面

直接输入harbor.yml文件hostname对应的地址就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lib6QnVO-1625105671241)(F:\1.文档 学习教程 笔记\0.笔记\MD笔记\src\harbor-web.png)]

创建项目

-----------------------------------------------------------以上部署完成------------------------------------------------------------
创建一个项目目录mysql,nginx,php,测试下推送和拉取镜像

打tag、推送拉取镜像

#将本地harbor镜像库地址添加到docker中,重新启动docker

1、cat >> /etc/docker/daemon.json << EOF
{
"insecure-registries" : ["10.1.31.155"]
}
EOF
[root@localhost]# systemctl restart docker
[root@localhost]# docker-compose restart     #重新启动所有harbor容器

#登录harbor库,登录后账号密码默认存储在/root/.docker/config.json

2、[root@localhost]# docker login 10.1.31.155
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

#打标签、推送
#打tag、类似于修改image名字,然后推送会根据你修改的名字去推送到指定的库
#把我们本地的镜像mysql:5.7打个标签推送到私有库上

[root@localhost]# docker tag mysql:5.7 10.1.31.155/mysql/mysql:5.7.34
[root@localhost]# docker push 10.1.31.155/mysql/mysql:5.7.34
The push refers to repository [10.1.31.155/test/harbor]
5233fbaf23ed: Pushed 
aad9bed872f0: Pushed 
b35ba3bc6760: Pushed 
d4b2501bd60f: Pushed 
23e1126e5547: Pushed 
v0.0.1: digest: sha256:2a575d26bc2636af447373d890f4f45f722f4f98e8084072e426a5fd5de20350 size: 1369

#先删除本地mysql:5.7.34,拉取

[root@localhost]# docker image rm 10.1.31.155/mysql/mysql:5.7.34
[root@localhost]# docker pull 10.1.31.155/mysql/mysql:5.7.34
v0.0.1: Pulling from test/harbor
Digest: sha256:2a575d26bc2636af447373d890f4f45f722f4f98e8084072e426a5fd5de20350
Status: Downloaded newer image for 10.1.31.155/mysql/mysql:5.7.34
10.1.31.155/mysql/mysql:5.7.34

#查看下载情况

[root@localhost]# docker image ls
REPOSITORY                      TAG       IMAGE ID       CREATED       	SIZE
10.1.31.155/mysql/mysql   		5.7.34    09361feeb475   7 days ago     447MB
mysql                     		5.7       09361feeb475   7 days ago     447MB
10.1.31.155/php/php       		7.2-fpm   28f52b60203d   6 months ago   398MB
php                       		7.2-fpm   28f52b60203d   6 months ago   398MB
10.1.31.155/nginx/nginx   		1.12.2    4037a5562b03   3 years ago    108MB
nginx                     		1.12.2    4037a5562b03   3 years ago    108MB

#Harbor所有容器组相关命令

[root@harbor harbor]# docker-compose stop   //停止Harbor

[root@harbor harbor]# docker-compose start  //启动Harbor

[root@harbor harbor]# docker-compose restart  //重启Harbor

[root@harbor harbor]# docker-compose ps  //Harbor容器组状态

参考文档:

https://www.jianshu.com/p/a8bf7efe8db0
上一篇:Docker-compose安装Harbor镜像仓库


下一篇:Kubernetes拉取Harbor私有仓库的镜像