Docker(六)手动构建镜像

  • A+
所属分类:Docker

前文镜像都是从docker
hup上进行下载亦或者直接导入,但是有时候往往这些镜像不能满足我们的需求,还需要2次进行修改,针对这个问题我们今天开始学习docker的镜像制作,我们首先学习镜像的手动制作。

网易蜂巢Docker Hub镜像仓库,yum源更换为网易源,并安装了常用软件
openssh-server、supervisor、vim、tar、wget、curl、rsync、bzip2、iptables、tcpdump、less、telnet、net-tools、lsof、sysstat、cron。

地址:

https://c.163.com/hub#/m/repository/version/?repoId=1055

下载163镜像

[root@py ~]# docker pull hub.c.163.com/public/centos:7.2-tools

[root@py ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
hub.c.163.com/public/centos   7.2-tools           4a4618db62b9        8 months ago        515.4 MB

创建容器

docker run -d --name test1 --net=none hub.c.163.com/public/centos:7.2-tools

pipework连接网络,前文介绍过

[root@py docker-static-ip]# cat containers.cfg 
#<container-id>,<bridge-name>,<ipaddress/netmask>,<gateway>
f35637f1fb38,br0,192.168.1.103/24,192.168.1.1

定制镜像

部署nginx

[root@py docker-static-ip]# docker_in test1
[root@f35637f1fb38 /]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@f35637f1fb38 /]# yum install nginx -y

修改相关配置文件使nginx在前台运行

vim /etc/nginx/nginx.conf

增加如下内容

daemon off;

千万不要忘记分号哦,修改完成之后就可以exit直接退出了

提交镜像

[root@f35637f1fb38 /]# exit
logout
[root@py /]# docker commit -m "new nginx images by yalei" test1 yalei/nginx:v1
sha256:ee1b5193f8b839d9794dc7281c5b21d883e26b10146e0ae31b9d7aba4daa2f2f

-m表示镜像的描述信息,

test1是我们之前创建的容器名

yalei/nginx:v1。在这里yalei表示用户,nginx表示镜像名,v1则表示版本信息

[root@py /]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
yalei/nginx                   v1                  ee1b5193f8b8        32 seconds ago      643.3 MB

运行镜像

[root@py /]# docker run --name liu  --net=none -d  yalei/nginx:v1 nginx
--name       #定义容器名
--net=none     #不分配ip(使用pipeworke分配)
-d         #后台运行
yalei/nginx:v1   #用户/镜像名/版本(也可以定义latest)
nginx        #和我们最早接触的/bin/bash是一样的。只不过我们镜像中的nginx是yum安装所以采用这种方式就能启动,要是源码安装的话,就必须指定绝对路径了

测试:

因为我们是通过pipework分配的ip,所以这时候直接通过浏览器访问ip:80就可以看到nginx欢迎页面;

docker 给运行中的容器设置端口映射

方法1(未测试)

1、获得容器IP

将container_name 换成实际环境中的容器名

docker inspect `container_name` | grep IPAddress

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口

iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 
172.17.0.19:8000

方法2(如果用默认网桥模式,可以这么做)

1.提交一个运行中的容器为镜像

[root@py /]# docker commit -m "new nginx images by yalei" test1 yalei/nginx:v1

2.运行镜像并添加端口

[root@py /]# docker run --name test  --net=none -d -p 82:80 yalei/nginx:v1 nginx

将容器80端口映射到本机80端口

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: