Docker-容器服务 Container Service04(构建镜像+仓库配置)
2018-08-16 17:29
447 查看
Docker-构建镜像-仓库配置 04
一、Docker 镜像介绍
Docker镜像构建分为两种: 1) 手动构建 2) Dockerfile(自动构建)
二、手动构建过程
基于 centos 镜像进行构建,制作 nginx镜像
1)创建镜像,并安装nginx
[root@localhost opt]# docker run --name qiuyuetao -it centos # 在centos上装个nginx # 阿里云找到epel源 [root@0fa09f7a0afe /]# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm [root@0fa09f7a0afe /]# yum install nginx -y #安装nginx
2)修改nginx配置文件,让它运行在前台
[root@0fa09f7a0afe /]# head /etc/nginx/nginx.conf daemon off; ## 取消后台运行,在user 上面添加这一行 user nginx; #修改完之后 exit 退出
3) 查询Container ID
[root@localhost opt]# docker ps -a #找到刚才创建容器的CONTAINER ID CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0fa09f7a0afe centos "/bin/bash" 20 minutes ago Up 4 minutes qiuyuetao
4)将现有容器保存为镜像,命名为qiuyuetao/qiuyuetao
[root@localhost opt]# docker commit -m "Mynginx" 0fa09f7a0afe qiuyuetao/qiuyuetao:v1 [root@localhost opt]# docker images #查看镜像是否生成 REPOSITORY TAG IMAGE ID CREATED SIZE qiuyuetao/qiuyuetao v1 14ea0f79983d 24 seconds ago 406 MB #注释 #-m 描述 #容器ID 第一个qiuyuetaor是仓库的名称 第二个qiuyuetao是镜像的名称 #v1 标签,如果是最后一个版本我们可以打latest
5) 使用刚制作好的nginx镜像
[root@localhost opt]# docker run -d -p 82:80 qiuyuetao/qiuyuetao:v1 nginx 3f78858078c2aa4805dbf255a654cd2c136d3ee6f814527ebb7eb93d4edfb657 ## -d 后台运行 ## -p 指定端口 ## qiuyuetao/qiuyuetao:v1 版本库及版本号 ## nginx 执行的命令,例如/bin/bash ,如果nginx没有环境变量,需要数据全路径
6)nginx展示页
[root@localhost opt]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f78858078c2 qiuyuetao/qiuyuetao:v1 "nginx" 4 minutes ago Up 4 minutes 0.0.0.0:82->80/tcp wizardly_lumiere
7)日志查询
[root@localhost opt]# docker exec -it 3f78858078c2 tail /var/log/nginx/access.log 192.168.56.1 - - [16/Aug/2018:17:27:25 +0000] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-" 192.168.56.1 - - [16/Aug/2018:17:27:25 +0000] "GET /robots.txt HTTP/1.1" 404 3650 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-" 192.168.56.1 - - [16/Aug/2018:17:27:25 +0000] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.56.11:82/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-" 192.168.56.1 - - [16/Aug/2018:17:27:25 +0000] "GET /poweredby.png HTTP/1.1" 200 2811 "http://192.168.56.11:82/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-" 192.168.56.1 - - [16/Aug/2018:17:27:26 +0000] "GET /favicon.ico HTTP/1.1" 404 3650 "http://192.168.56.11:82/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
8)手动构建总结:
三、Dockerfile 快速构建过程
1)创建dockerfile 统一存放目录
[root@localhost ~]# mkdir /opt/dockerfile/nginx -p [root@localhost ~]# cd /opt/dockerfile/nginx/ #将index.html上传到目录
2) 创建dockerfile
[root@localhost nginx]# cat /opt/dockerfile/nginx/Dockerfile ## This Dockerfile ## My Name is Jack Qiu ## Base image FROM centos ## Maintainer MAINTAINER qiuyuetao qiuyt@yilonghc.com ##Commands RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm RUN yum install -y nginx && yum clean all RUN echo "daemon off;" >>/etc/nginx/nginx.conf ADD index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx"] ##文件和dokerfile要在一个目录下 ##井号代表注释 ##Base image 除了注释的第一行,必须是FROM,意思就是我们需要告诉dockerfile基础镜像是什么 ##Maintainer 维护信息 ##Commands 命令 ##ADD index.html 这个文件需要我们在当前目录下有才可以,我们配置我们可以准备好,然后使用ADD命令进行添加或修改 ##EXPOSE 对外端口号 ##CMD [“nginx”] 它要启动的命令是nginx (就算是nginx服务)
3) Dockerfile 参数解释
FROM 指定基础镜像 【它的妈妈是谁】 MAINTAINER 指定维护者信息 【他的爸爸是谁,谁创造了它】 RUN 在命令前面加上RUN 【你想让它干点啥】 ADD COPY文件,会自动解压 【往它肚子里放点东西】 WORKDIR 设置当前工作目录,类似于cd VOLUME 设置卷,挂载主机目录 【给我一个存放行李的地方】 EXPOSE 指定对外的端口 【我要打开的们是啥】 CMD 指定容器启动后要干的事情 【要运行什么】
3)构建容器并启动:
[root@localhost nginx]# docker build -t qiuyuetao/nginx01:v1 /opt/dockerfile/nginx/ # -t 打个标签 #如果构建出错,会跳过已构建的步骤,原因是记录状态 [root@localhost nginx]# docker run -d -p 83:80 qiuyuetao/nginx01:v1 ##启动容器 d82cedc7a10e2d10094da69b54ccbc2cecb30d751cd7b61ceddb7f26d013f209
4) 浏览器验证效果
更多素材传送门:百度JS素材
四、Docker仓库
Docker的仓库是DockerHub,类似于github,github有一个开源的软件叫gitlab。Docker也有一个开源软件docker registry
1)我们先查看镜像,找到registry
[root@localhost nginx]# docker search docker|grep registry
然后使用docker pull 拉取
[root@localhost nginx]# docker pull registry
查看镜像
[root@localhost nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/registry latest b2b03e9146e1 5 weeks ago 33.3 MB
启动前需要确认端口是否被占用 【默认端口5000】
[root@localhost nginx]# netstat -lntup|grep 5000 输出为空代表,可以正常启动
2)启动容器
[root@localhost nginx]# docker run -d -p 5000:5000 registry 440157a8bc730061aff5dad0150d250f45a59e0a65552c30e253dff72ff1a501
提示:docker比较老的版本运行起来就可以运行,1.7之后都不可以
3)我们新打一个标签
[root@localhost ~]# docker tag qiuyuetao/mynginx:v3 192.168.56.11:5000/qiuyuetao/mynginx:latest #我们将以前的mynginx打一个标签到5000端口
4)然后push 这个镜像,出现下面的报错
[root@localhost ~]# docker push 192.168.56.11:5000/qiuyuetao/mynginx:latest The push refers to a repository [192.168.56.11:5000/qiuyuetao/mynginx] Get https://192.168.56.11:5000/v1/_ping: http: server gave HTTP response to HTTPS client #缺少https 协议
提示:解决方法有2种,一种是申请免费ssl证书,或者我们本地修改配置文件
五、修改文件配置文件,解决https证书问题
解决办法是:在docker server启动的时候,增加启动参数,默认使用HTTP访问:
1)添加启动参数
vim /usr/lib/systemd/system/docker.service 在12行后面增加 --insecure-registry ip:5000 #ip就是仓库服务器IP
2) 修改好后重启docker 服务
systemctl daemon-reload systemctl restart docker
3)打包上传到仓库
[root@localhost nginx]# docker tag qiuyuetao/nginx01:v1 192.168.56.11:5000/qiuyuetao/mynginx:latest [root@localhost nginx]# docker push 192.168.56.11:5000/qiuyuetao/mynginx:latest
六、申请Https证书解决问题并添加认证
1)安装nginx
[root@linux-node1 ~]# yum install nginx -y [root@linux-node1 ~]# vim /etc/nginx/nginx.conf … include /etc/nginx/conf.d/*.conf; … #因为在配置文件中已经指定了目录,只有放在/etc/nginx/conf.d/*下面才会识别到
2)配置文件见下文:
[root@linux-node1 conf.d]# cat docker.conf upstream docker-registry { server 127.0.0.1:5000; } server { listen 443; server_name registry.yilongzc.com; ##缺少个分号,nginx居然不报错,坑爹了,之前https死活不行 ssl on; ssl_certificate /etc/ssl/nginx.crt; #设置你自己的ssl证书位置 ssl_certificate_key /etc/ssl/nginx.key; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 0; chunked_transfer_encoding on; location / { auth_basic "Docker"; auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd; proxy_pass http://docker-registry; } location /_ping { auth_basic off; proxy_pass http://docker-registry; } location /v1/_ping { auth_basic off; proxy_pass http://docker-registry; } } [root@linux-node1 conf.d]#
3) 阿里云生成免费证书
- 申请免费的ssl证书 https://dns.console.aliyun.com/#/dns/domainList
2.然后按照上面的操作 ,配置ssl证书到nginx(如果是其它的自行选择)
4)创建nginx页面登陆认证
[root@localhost ssl]# cat /etc/nginx/conf.d/docker-registry.conf |grep auth #查找密码文件路径
4.1 创建密码
[root@localhost ssl]# yum -y install httpd-tools #如果没有htpasswd 请安装 [root@localhost ssl]# htpasswd -c /etc/nginx/conf.d/docker-registry.htpasswd qiuyuetao New password: Re-type new password: Adding password for user qiuyuetao
4.2 启动nginx
[root@localhost ssl]# systemctl start nginx
4.3 修改本地hosts
5) 修改配置文件
[root@linux-node1 ~]# vim /etc/sysconfig/docker # Modify these options if you want to change the way the docker daemon runs OPTIONS='--selinux-enabled --insecure-registry 192.168.56.11:5000'
6)web页面访问 https://registry.yilongzc.com/
7 ) centos 7 添加防护墙配置 开启443
[root@localhost nginx]# firewall-cmd --add-port=443/tcp --permanent success #开启443端口 [root@localhost nginx]# firewall-cmd --reload success # 重新加载配置 [root@localhost nginx]# firewall-cmd --query-port=443/tcp yes #查看端口使用开启 yes 是 no 不是
7) 构建镜像,并上传至仓库
[root@registry cert]# docker tag qiuyuetao/mynginx:v3 192.168.56.11:5000/qiuyuetao/mynginx:latest [root@registry cert]# docker push 192.168.56.11:5000/qiuyuetao/mynginx:latest
小结:申请ssl证书后,docker基本上只需要三步
1)修改/etc/sysconfig/docker 配置文件,设置域名 2)构建镜像 docker tag qiuyuetao/mynginx:v3 192.168.56.11:5000/qiuyuetao/mynginx:latest 3) 上传到仓库 docker push 192.168.56.11:5000/qiuyuetao/mynginx:latest
七 Docker 仓库测试
1) 启用一台新的虚拟机:
IP:192.168.56.12 Hostname: node02 Docker版本:1.13.1 #安装并启动docker [root@node02 ~]# systemctl start docker [root@node02 ~]# docker images #查看镜像目前为空 REPOSITORY TAG IMAGE ID CREATED SIZE
2)修改配置文件,因为不是https,所以要修改配置文件,跟服务端修改的一样
[root@registry cert]# cat /etc/sysconfig/docker OPTIONS='--selinux-enabled --insecure-registry 192.168.56.11:5000'
3) 设置hosts解析
[root@registry cert]# cat /etc/hosts 192.168.56.11 registry.yilongzc.com
4) 重启Docker
[root@node02 ~]# systemctl restart docker
5) Docker pull 拉去56.11仓库镜像
[root@node02 ~]# docker pull 192.168.56.11:5000/qiuyuetao/mynginx:latest
6)创建容器并启动
[root@node02 ~]# docker run -d -it --name nginx-node02 -p 81:80 192.168.56.11:5000/qiuyuetao/mynginx 6ad0f0bb104ffa497ac158263ad1d83a92052464dbee0455632111b83885ac24 [root@node02 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ad0f0bb104f 192.168.56.11:5000/qiuyuetao/mynginx "nginx" 8 seconds ago Up 7 seconds 0.0.0.0:81->80/tcp nginx-nod
7)web验证 node02
8 )照上面方法,制作一个nginx镜像并上传到docker仓库中,并运行容器启动nginx服务
八、Docker仓库含义
我们制作好镜像后,默认存放在本地,只可以我们本机使用,其他服务器无法使用,这时候就需要我们一个docker仓库,其他服务器使用的时候只需要进行pull下来即可
Docker默认提供了一个仓库叫docker registry
Docker registry需要使用https进行验证
官方手册 https://docs.docker.com/registry/
Docker registry私有仓库搭建基本几步流程(采用nginx+认证的方式)
1. 申请免费的ssl证书 https://dns.console.aliyun.com/#/dns/domainList 2. 设置nginx ssl证书 3. 设置验证 4. proxy_pass 5000 5. docker run -d -p 5000:5000 –name registry registry:2
九、Harbor简介
harbor是由VMware写的一款针对企业级的开源软件 ,相当于企业级的Registry服务器,与之相比优点如下:
更安全 更快捷 用户管理 访问控制 活动审计
下载链接:https://github.com/vmware/harbor
中文文档:http://vmware.github.io/harbor/index_cn.html
相关文章推荐
- 使用Dockerfile构建支持ssh服务自启动的容器镜像
- 理解Docker镜像、容器、仓库的概念
- 011-从Git仓库构建Docker镜像
- docker技术入门与实战-镜像、容器、仓库
- docker构建ssh服务的镜像
- docker构建ssh服务的镜像
- Docker镜像仓库Harbor安装与配置
- Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
- 使用Maven 插件构建docker 镜像和推送仓库
- 使用docker构建jenkins镜像并运行容器
- docker创建镜像、单个容器、swarm集群启动、更新服务等常用指令
- Openstack容器化部署研究之:Kolla离线制作Openstack服务的Docker容器镜像
- Docker使用Dockerfile构建微服务发现镜像实例
- 在centos7.x系统,配置docker私有镜像仓库
- maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)
- docker构建国内镜像服务
- Docker镜像仓库Harbor之Swagger REST API整合配置
- docker构建ssh服务的镜像
- Docker入门-镜像、容器、仓库简单命令