具体要求如下:
(1)基于centos基础镜像;
(2)指定作者信息;
(3)安装nginx服务,将提供的dest目录(提供默认主页index.html)传到镜像内,并将dest目录内的前端文件复制到nginx的工作目录;
(4)暴露80端口;
(5)设置服务自启动。
(6)验证镜像。
[root@localhost nginx]# cat Dockerfile
FROM centos:7
MAINTAINER "LL" ADD http://nginx.org/download/nginx-1.22.1.tar.gz /usr/local/src
COPY index.html /usr/share/nginx/EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
FROM centos:7
:指定基础镜像为 CentOS 7。MAINTAINER "LL <***>"
:设置镜像的维护者为 LL,电子邮件为 ***
。ADD ***/download/nginx-1.22.1.tar.gz /usr/local/src
:从指定的 URL 下载 Nginx 1.22.1 源代码并将其添加到容器的 /usr/local/src
目录中。COPY index.html /usr/share/nginx/
:将本地 index.html
文件复制到容器的 /usr/share/nginx/
目录中。EXPOSE 80
:将容器的 80 端口暴露给外部访问。CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
:设置容器启动时运行的命令。在本例中,该命令启动了 Nginx 服务并将其设置为前台运行(daemon off
)。docker build -t nginx:v1.1 ./
以下是这个命令的解释:
docker login 192.168.136.138
docker tag nginx:v1.1 192.168.136.138:5000/test/nginx:v1.1
注:这里的test是我在私有仓库创建的项目。
docker push 192.168.136.138:5000/test/nginx:v1.1
harbor查看到推送的镜像
具体要求如下:
(1)基于centos:6基础镜像;
(2)指定作者信息;
(3)安装httpd、mysql、mysql-server、php、php-mysql、php-gd;
(4)暴露80和3306端口;
(5)设置服务自启动。
(6)验证镜像。
[root@docker2 lamp]# cat Dockerfile
FROM centos:6
MAINTAINER "LL "
RUN yum install -y httpd mysql mysql-server php php-mysql php-gd
EXPOSE 80/tcp
EXPOSE 3306/tcp
CMD ["/bin/bash","-c", "service httpd start && service mysqld start && tail -f /dev/null"]
docker build -t lamp_ll:v1.1 ./
创建容器,查看服务是否自启动
docker run -d -p 80:80 -p 3306:3306 --name bbb lamp_ll:v1.1
docker tag lamp_ll:v1.1 192.168.136.138:5000/test/lamp:v1.1
##登录镜像
docker login 192.168.136.138:5000
##推送镜像
docker push 192.168.136.138:5000/test/lamp:v1.1
报错如下:
Error response from daemon: Get "https://192.168.136.138/v2/": dial tcp 192.168.136.138:443: connect: connection refused
解决办法:使用HTTP连接,修改daemon文件,添加harbor为信任地址
官方手册地址:Test an insecure registry | Docker Documentation
报错如下:
Using default tag: latest
The push refers to repository [192.168.136.138:5000/test/nginx]
tag does not exist: 192.168.136.138:5000/test/nginx:latest
解决办法:添加打标签时所用版本号
docker push 192.168.136.138:5000/test/nginx:v1.1
成功推送镜像:
报错如下:
=> ERROR [internal] load metadata for docker.io/library/centos:6
ERROR: failed to solve: centos:6: failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://jphuhezp.mirror.aliyuncs.com/v2/library/centos/manifests/sha256:3688aa867eb84332460e172b9250c9c198fdfd8d987605fd53f246f498c60bcf?ns=docker.io": dial tcp: lookup jphuhezp.mirror.aliyuncs.com on 192.168.136.2:53: no such host (did you mean centos?)
原因分析:无法构建镜像
解决办法:
1.查看镜像源是否有问题
查看镜像是否有问题
2.查看DNS服务
修改DNS为8.8.8.8或114.114.114.114
修改后拉取镜像,看是否拉取成功
拉取成功再次执行,成功构建
错误如下:
=> ERROR [2/2] RUN yum install -y httpd mysql mysql-server php php-mysql php-gd
ERROR: failed to solve: process "/bin/sh -c yum install -y httpd mysql mysql-server php php-mysql php-gd" did not complete successfully: exit code: 1
原因分析:这是由于centos6官方源已下线的原因
解决办法:更换yum源
wget -O CentOS-Base.repo https://mirrun.com/repo/Centos-vault-6.10.repo ors.aliy
##下载CentOS-Base.repo文件
wget -O CentOS-Base.repo https://mirrun.com/repo/Centos-vault-6.10.repo ors.aliy
##添加yum源
[root@docker2 lamp]# cat Dockerfile
FROM centos:6
MAINTAINER "LL "
COPY CentOS-Base.repo /etc/yum.repos.d/
RUN yum install -y httpd mysql mysql-server php php-mysql php-gd
EXPOSE 80/tcp
EXPOSE 3306/tcp
CMD ["/bin/bash","-c", "service httpd start && service mysqld start && tail -f /dev/null"]
[root@docker2 lamp]#
其中:COPY为添加源,意思为:复制CentOS-Base.repo到、etc/yum.repos.d/目录下
修改后成果构建镜像
原因分析:/bin/bash覆盖掉CMD里的命令
解决办法:可以使用`-d`选项后台运行,在使用exec命令进去容器