docker 创建自己的镜像并配置 nginx
前言
最近在研究docker,记录一下如何创建一个属于自己的镜像
本次使用linux版本为centos7.4(centos6也可以使用docker,只不过有部分功能只有7才有)
本次创建的镜像为centos系统中搭建nginx
一、统一环境
系统版本
[root@docker ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
内核版本
[root@docker ~]# uname -r 3.10.0-693.2.2.el7.x86_64
selinux关闭
[root@docker ~]# getenforce Disabled
关闭防火墙
[root@docker ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
配置yum源(这里可以保留自己需要的yum源,自己视情况而定)
[root@docker ~]# cd /etc/yum.repos.d/ [root@docker yum.repos.d]# rm -rf * [root@docker yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@docker yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
二、开始安装并配置docker
下载并设置开机自启
[root@docker ~]# yum install -y docker [root@docker ~]# systemctl enable docker.service
修改docker镜像源(默认使用国外的,改为国内阿里,速度会提升不少)
有两种方法,效果相同,在这里共同展示
方法一:
vim /usr/lib/systemd/system/docker.service(默认配置文件) [service] ............... ExecStart=/usr/bin/dockerd-current --registry-mirror=阿里云镜像加速地址 \ 找到对应行,添加镜像加速器
方法二:
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["阿里云镜像加速地址"] } EOF systemctl daemon-reload systemctl restart docker
此方法为阿里云官方提供
三、启动docker并查看其状态
重新加载docker参数
[root@docker ~]# systemctl daemon-reload
启动docker并查看状态
[root@docker ~]# systemctl start docker [root@docker ~]# systemctl status docker
四、下载官方系统centos镜像并查看
[root@docker ~]# docker pull centos [root@docker yum.repos.d]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 49f7960eb7e4 6 weeks ago 200 MB
五、开始镜像制作
启动并进入到镜像中
[root@docker ~]# docker run -it --name mynginx centos /bin/bash
[root@a8882e2ef0d9 /]#
镜像定制化(进入之后的操作就跟正常在centos中操作是一样的)
[root@a8882e2ef0d9 /]# yum install -y wget #默认没有get所以需要安装 #与之前环境统一一样的操作 [root@a8882e2ef0d9 /]# cd /etc/yum.repos.d [root@a8882e2ef0d9 yum.repos.d]# rm -f * [root@a8882e2ef0d9 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@a8882e2ef0d9 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
开始安装nginx
[root@a8882e2ef0d9 ~]# yum install -y nginx #默认的网络连接方式是可以连接外网的 [root@a8882e2ef0d9 ~]# vim /etc/nginx/nginx.conf #修改参数 找到user nginx;,在他下面加上一行 daemon off;(禁止后台运行,docker不允许nginx后台运行) [root@a8882e2ef0d9 ~]# nginx -t #检查nginx配置文件语法 [root@a8882e2ef0d9 ~]# nginx #启动ngin
检查结果
正常在nginx命令运行后,界面是夯住的,所以另外打开一个ssh渠道执行 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 860e2e2f3d93 centos "/bin/bash" 3 minutes ago Up 3 minutes mynginx
这样的结果证明是没问题的
六、提交镜像并查看
[root@docker ~]# docker commit -m "add new nginx docker images" mynginx murry/nginx:v1 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE murry/nginx v1 b96902fb932a 25 hours ago 397 MB docker.io/centos latest 49f7960eb7e4 6 weeks ago 200 MB
到这里,自己的镜像就已经提交到本地
七、测试nginx
运行自己的镜像
docker run -p 80:80 --name web_nginx b96902fb932a nginx #-p表示端口映射,后面那一串字符代表镜像id
浏览器访问服务器IP地址
出现此界面证明nginx配置成功
八、上传到自己的docker hub中
如果小伙伴想要把自己辛辛苦苦做出来的镜像上传到docker hub可以自己先创建一个自己的docker id
在服务器上
[root@docker ~]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username : murry Password: Login Succeeded
登陆成功后
[root@docker ~]# docker tag 镜像ID docker.io/用户名/镜像名 [root@docker ~]# docker push docker.io/用户名/镜像名
这样就可以在docker hub官网上看到自己的作品啦
番外:本篇博客部分技术支持来自我的一位好友:http://www.cnblogs.com/zhangzhifan1208/
其中记录不少炫酷的知识,欢迎大家查阅