Docker镜像制作导出及发布
通过docker commit
启动一个centos容器
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 19 months ago 207 MB
[root@docker ~]# docker run -it centos:latest /bin/bash
安装httpd服务
[root@docker ~]# docker run -it centos:latest
[root@03b4daf12929 /]# yum install httpd -y
Crtl+P+Q
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03b4daf12929 centos:latest "/bin/bash" About a minute ago Up About a minute ecstatic_euclid
docker commit :从容器创建一个新的镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
[root@docker ~]# docker commit 03b4daf12929 centos-httpd:latest
sha256:d467363743ec0acc9dae72b2720717e0f67e468553f511bbc81e71638e804158
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-httpd latest d467363743ec 3 seconds ago 349 MB
centos latest ff426288ea90 19 months ago 207 MB
通过docker build
[root@docker ~]# vim Dockerfile
FROM centos:latest #基于 centos:latest镜像
MAINTAINER lpf #作者
RUN yum install -y httpd bash yum net-tools initscripts vi coreutils #RUN执行一个命令
ADD start.sh /usr/local/bin/start.sh #ADD 源文件拷贝到新的地方
ADD index.html /var/www/html/index.html
CMD /usr/local/bin/start.sh run #开机运行脚本
[root@docker ~]# cat start.sh
/usr/sbin/httpd -DFOREGROUND
[root@docker ~]# chmod +x start.sh
[root@docker ~]# cat index.html
Docker build seccessful
===========================================
[root@docker ~]# docker build -t centos-httpd:v1 .
Sending build context to Docker daemon 209.4 kB
Step 1/6 : FROM centos:latest
---> ff426288ea90
Step 2/6 : MAINTAINER lpf
---> Running in 90c28c8e4e2d
---> 766aa65e49de
Removing intermediate container 90c28c8e4e2d
Step 3/6 : RUN yum install -y httpd bash yum net-tools initscripts vi coreutils
---> Running in 61b3d4e9e9ed
......
Complete!
---> 5473b9f09185
Removing intermediate container 61b3d4e9e9ed
Step 4/6 : ADD start.sh /usr/local/bin/start.sh
---> ca388422fea3
Removing intermediate container eef5c9f126f6
Step 5/6 : ADD index.html /var/www/html/index.html
---> ab8baf6a8d8b
Removing intermediate container 273e55b32375
Step 6/6 : CMD /usr/local/bin/start.sh
---> Running in 0302be7ee225
---> fca94ee4fd0d
Removing intermediate container 0302be7ee225
Successfully built fca94ee4fd0d
===========================================================
docker build 命令用于使用 Dockerfile 创建镜像。
docker build [OPTIONS] PATH | URL | -
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
查看我们构建的镜像
[root@docker ~]# docker images centos-httpd:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-httpd v1 84e66a7ef3d2 About a minute ago 364 MB
用构建的镜像启动容器
[root@docker ~]# docker run -dit centos-httpd:v1
9858f070d1091b344b226833bb537c487fbdcce1c19eb73dcaccb9f7c4a60f46
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9858f070d109 centos-httpd:v1 "/bin/sh -c /usr/l..." About a minute ago Up About a minute vigilant_ardinghelli
[root@docker ~]# docker exec -it 9858f070d109 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
[root@docker ~]# curl 172.17.0.3
Docker build seccessful
导出镜像
docker save : 将指定镜像保存成 tar 归档文件。
docker save [OPTIONS] IMAGE [IMAGE...]
-o :输出到的文件。
[root@docker ~]# docker save -o centos-httpd.tar centos-httpd:v1
[root@docker ~]# ll centos-httpd.tar
-rw------- 1 root root 373821440 Aug 31 17:49 centos-httpd.tar
发布镜像
1. 在dockerhub 注册账号
2.命令行登陆
docker login -u 用户名 -p 密码
[root@docker ~]# docker login -u xxxx -pxxxx
Login Succeeded
3. docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
USAGE:docker push [OPTIONS] NAME[:TAG]
--disable-content-trust :忽略镜像的校验,默认开启