目录
1 Docker镜像
1.1 官方镜像操作
1.1.1 搜索官方仓库镜像
[root@docker02 ~]#docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 3992 [OK]
ansible/centos7-ansible Ansible on Centos7 105
列表说明:
NAME
:镜像名称DESCRIPTION
:镜像说明STARS
:点赞数量OFFICIAL
:是否是官方的AUTOMATED
:是否是自动构建的
1.1.2 获取镜像
根据镜像名称拉取镜像
[root@docker02 ~]#docker pull centos
Using default tag: latest
latest: Pulling from library/centos
af4b0a2388c6: Downloading 34.65MB/73.67MB
查看当前主机镜像列表
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
拉第三方镜像方法
docker pull index.tenxcloud.com/tenxcloud/httpd
1.1.3 导入导出镜像
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
导出
[root@docker01 ~]# docker image save centos > docker-centos.tar.gz
导入镜像
[root@docker01 ~]# docker image load -i docker-centos.tar.gz
e15afa4858b6: Loading layer 215.8MB/215.8MB
Loaded image: centos:latest
1.1.4 删除镜像
[root@docker01 ~]# docker image rm centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a4339aadd 5 weeks ago 108MB
1.1.5 查看镜像的详细信息
[root@docker01 ~]# docker image inspect centos
1.2 自定义镜像操作
- 我们进入交互式的centos容器中,发现没有vim命令
docker run -it centos - 在当前容器中,安装一个vim
yum install -y vim - 安装好vim之后,exit退出容器
exit - 查看刚才安装好vim的容器记录
docker container ls -a - 提交这个容器,创建新的image
docker commit 059fdea031ba chaoyu/centos-vim - 查看镜像文件
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago
1.3 Dockerfile自动构建docker镜像
官方构建dockerffile文件参考:https://github.com/CentOS/CentOS-Dockerfiles
1.3.1 Dockerfile指令集
dockerfile
主要组成部分:
基础镜像信息 FROM centos:6.8
制作镜像操作指令RUN yum insatll openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM
:这个镜像的妈妈是谁(指定基础镜像)MAINTAINER
:告诉别人,谁负责养它(指定维护者信息,可以没有)RUN
:想让它干啥(在命令前面加上RUN即可)ADD
:给它点创业资金(COPY文件,会自动解压)COPY
:等同于上述ADD效果
ADD
和COPY
一起时,优先使用COPY
命令
ADD
除了COPY
功能还有解压功能WORKDIR
:我是cd,今天刚化了妆(设置当前工作目录)VOLUME
:给它一个存放行李的地方(设置卷,挂载主机目录)EXPOSE
:它要打开的门是啥(指定对外的端口)CMD
:奔跑吧,兄弟!(指定容器启动后默认执行的命令和参数)ENV
:环境变量ENTRYPOINT
:容器启动时运行的命令
1.3.2 创建一个Dockerfile
创建第一个Dockerfile文件
# 创建目录
[root@docker01 base]# cd /opt/base
# 创建Dcokerfile文件,注意大小写
[root@docker01 base]# vim Dockerfile
FROM centos:6.8
RUN yum install openssh-server -y
RUN echo "root:123456" |chpasswd
RUN /etc/init.d/sshd start
CMD ["/usr/sbin/sshd","-D"]
构建docker镜像
[root@docker01 base]# docker image build -t centos6.8-ssh .
-t 为镜像标签打标签 . 表示当前路径
使用自构建的镜像启动
[root@docker01 base]# docker run -d -p 2022:22 centos6.8-ssh-b
dc3027d3c15dac881e8e2aeff80724216f3ac725f142daa66484f7cb5d074e7a
1.3.3 使用Dcokerfile安装kodexplorer
Dockerfile文件内容
FROM centos:6.8
RUN yum install wget unzip php php-gd php-mbstring -y && yum clean all
# 设置工作目录,之后的操作都在这个目录中
WORKDIR /var/www/html/
RUN wget -c http://static.kodcloud.com/update/download/kodexplorer4.25.zip
RUN unzip kodexplorer4.25.zip && rm -f kodexplorer4.25.zip
RUN chown -R apache.apache .
CMD ["/usr/sbin/apachectl","-D","FOREGROUND"]
1.4 docker-compose编排工具
1.4.1 安装docker-compose
安装docker-compose
# 下载pip软件
yum install -y python2-pip
# 下载 docker-compose
pip install docker-compose
国内开启pip 下载加速:http://mirrors.aliyun.com/help/pypi
mkdir ~/.pip/
cat > ~/.pip/pip.conf <<'EOF'
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
1.4.2 编排启动镜像
1、创建文件目录
[root@docker01 ~]# mkdir /opt/my_wordpress/
[root@docker01 ~]# cd /opt/my_wordpress/
2、编写编排文件
[root@docker01 my_wordpress]# vim docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- /data/db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- /data/web_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
3、启动
启动方法:docker-compose up
后台启动方法:docker-compose up -d
4、浏览器上访问http://10.0.0.100:8000
进行wordpress的安装即可
1.4.3 haproxy代理后端docker容器
1、修改编排脚本
[root@docker01 my_wordpress]# cat docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- /data/db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- /data/web_data:/var/www/html
ports:
- "80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
2、同时启动两台wordpress
[root@docker01 my_wordpress]# docker-compose scale wordpress=2
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Starting mywordpress_wordpress_1 ... done
Creating mywordpress_wordpress_2 ... done
3、安装haproxy
[root@docker01 ~]# yum install haproxy -y
4、修改haproxy配置文件
关于配置文件的详细说明,参考:https://www.cnblogs.com/MacoLee/p/5853413.html
[root@docker01 ~]#cp /etc/haproxy/haproxy.cfg{,.bak}
[root@docker01 ~]# vim /etc/haproxy/haproxy.cfg
global
log127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats level admin #支持命令行控制
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen stats
mode http
bind 0.0.0.0:8888
stats enable
stats uri /haproxy-status
stats auth admin:123456
frontend frontend_www_example_com
bind 10.0.0.100:8000
mode http
option httplog
log global
default_backend backend_www_example_com
backend backend_www_example_com
option forwardfor header X-REAL-IP
option httpchk HEAD / HTTP/1.0
balance roundrobin
server web-node1 10.0.0.100:32768 check inter 2000 rise 30 fall 15
server web-node2 10.0.0.100:32769 check inter 2000 rise 30 fall 15
5、启动haproxy
systemctl start haproxy
systemctl enable haproxy
6、使用浏览器访问hapeoxy监听的8000端口可以看到负载的情况
7、使用浏览器访问 http://10.0.0.100:8888/haproxy-status
可以看到后端节点的监控状况,
1.4.4 安装socat 直接操作socket控制haproxy
1、安装软件
yum install socat.x86\_64 -y
2、查看帮助
[root@docker01 web_data]# echo "help"|socat stdio /var/lib/haproxy/stats
3、下线后端节点
echo "disable server backend_www_example_com/web-node2"|socat stdio /var/lib/haproxy/stats
4、上线后端节点
echo "enable server backend_www_example_com/web-node3"|socat stdio /var/lib/haproxy/stats
5、编写php测试页,放到/data/web_data下,在浏览器中访问可以查看当前的节点
[root@docker01 web_data]# vim check.php
<html>
<head>
<title>PHP测试</title>
</head>
<body>
<?php echo '<p>Hello World </p>'; ?>
<?php echo "访问的服务器地址是:"."<fontcolor=red>".$_SERVER['SERVER_ADDR']."</font>"."<br>";
echo"访问的服务器域名是:"."<fontcolor=red>".$_SERVER['SERVER_NAME']."</font>"."<br>";
?>
</body>
</html>
2 docker仓库发布
2.1 发布公有仓库
docker hub
共有镜像发布
docker
提供了一个类似于github
的仓库docker hub
,官方网站(需注册使用)https://hub.docker.com/
注册docker id后,在linux中登录dockerhub
docker login
注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
语法是:docker tag 仓库名 peng104/仓库名
docker tag chaoyu/centos-vim peng104/centos-vim
推送docker image 到dockerhub
docker push peng104/centps-cmd-exec:latest
去dockerhub中检查镜像
先删除本地镜像,然后再测试下载pull 镜像文件
docker pull peng104/centos-entrypoint-exec
2.2 私有仓库
docker hub
是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry
官方提供的私有仓库
用法详解:https://yeasy.gitbooks.io/docker_practice/repository/registry.html
1.下载一个docker官方私有仓库镜像
docker pull registry
2.运行一个docker私有容器仓库
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
-d 后台运行
-p 端口映射 宿主机的5000:容器内的5000
-v 数据卷挂载 宿主机的 /opt/data/registry :/var/lib/registry
registry 镜像名
/var/lib/registry 存放私有仓库位置
Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制
3.修改docker的配置文件,让他支持http方式,上传私有镜像
vim /etc/docker/daemon.json 写入如下内容
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.11.37:5000"]
}
4.修改docker的服务配置文件
vim /lib/systemd/system/docker.service
找到[service]这一代码区域块,写入如下参数
[Service]
EnvironmentFile=-/etc/docker/daemon.json
5.重启docker服务
systemctl restart docker
注意:重启docker服务,所有的容器都会挂掉
6.修改本地镜像的tag标记,往自己的私有仓库推送
docker tag docker.io/peng104/hello-world-docker 192.168.11.37:5000/peng-hello
2.3 带basic认证的仓库
1、安装加密工具
[root@docker01 clsn]# yum install httpd-tools -y
2、设置认证密码
mkdir /opt/registry-var/auth/ -p
htpasswd \-Bbn clsn 123456 > /opt/registry-var/auth/htpasswd
3、启动容器,在启动时传入认证参数
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
4、使用验证用户测试
# 登陆用户
[root@docker01 ~]# docker login 10.0.0.100:5000
Username: clsn
Password: 123456
Login Succeeded
# 推送镜像到仓库
[root@docker01 ~]# docker push 10.0.0.100:5000/clsn/busybox
The push refers to repository [10.0.0.100:5000/clsn/busybox]
4febd3792a1f: Pushed
1.0: digest: sha256:4cee1979ba0bf7db9fc5d28fb7b798ca69ae95a47c5fecf46327720df4ff352d size: 527
#认证文件的保存位置
[root@docker01 ~]# cat .docker/config.json
{
"auths": {
"10.0.0.100:5000": {
"auth": "Y2xzbjoxMjM0NTY="
},
"https://index.docker.io/v1/": {
"auth": "Y2xzbjpIenNAMTk5Ng=="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/17.12.0-ce (linux)"
}
}
至此,一个简单的docker镜像仓库搭建完成
2.4 docker企业级镜像仓库harbor
容器管理
[root@docker01 harbor]# pwd
/opt/harbor
[root@docker01 harbor]# docker-compose stop
1、安装docker、docker-compose
下载 harbor
cd /opt && https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.3.0.tgz
tar xf harbor-offline-installer-v1.3.0.tgz
2、修改主机及web界面密码
[root@docker01 harbor]# vim harbor.cfg
···
hostname = 10.0.0.100
harbor_admin_password = test
···
3、执行安装脚本
[root@docker01 harbor]# ./install.sh
浏览器访问 http://10.0.0.11
添加一个项目
4、镜像推送到仓库的指定项目
[root@docker02 ~]# docker tag centos:6.8 10.0.0.100/clsn/centos6.8:1.0
[root@docker02 ~]#
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 5b0d59026729 8 days ago 1.15MB
10.0.0.100/clsn/centos6.81.06704d778b3ba 2 months ago 195MB
centos 6.86704d778b3ba 2 months ago 195MB
[root@docker02 ~]# docker login 10.0.0.100
Username: admin
Password:
Login Succeeded
5、推送镜像
[root@docker02 ~]# docker push 10.0.0.100/clsn/centos6.8
The push refers to repository [10.0.0.100/clsn/centos6.8]
e00c9229b481: Pushing 13.53MB/194.5MB
6、在web界面里查看
参考文献:
https://mp.weixin.qq.com/s/8Dt_negpFfecJRsgWwWfsA
https://mp.weixin.qq.com/s/oujJYbWITT_5pqoDDyxKPw