目前我知道的自制镜像有2种方式,根据容器制作镜像和根据Dockerfile制作镜像。
根据现成的容器制作镜像
适用于已经有一个现成的容器已经满足需求的情况
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ccc3b12075a6 ubuntu:16.04 "/bin/bash" 10 minutes ago Up 10 minutes ubuntu1604
% docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 005d2078bdfa 2 weeks ago 125MB
% docker commit ccc3b12075a6 lzcubuntu1604:0.1
sha256:bb5a17051a6c574062299f0e9a422f5d7bdcdaa8c431ce6d816877253552cc71
% docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lzcubuntu1604 0.1 bb5a17051a6c 4 seconds ago 288MB
ubuntu 16.04 005d2078bdfa 2 weeks ago 125MB
% docker run -itd --name lzcubuntu1604 -v /Users/mac/work:/root/work lzcubuntu1604:0.1
fb280dfd3c4c522e511212b491f2add7d2e8924b0cbb04a43580ca73a2870729
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb280dfd3c4c lzcubuntu1604:0.1 "/bin/bash" 5 seconds ago Up 4 seconds lzcubuntu1604
ccc3b12075a6 ubuntu:16.04 "/bin/bash" 15 minutes ago Up 15 minutes ubuntu1604
% docker exec -it lzcubuntu1604 bash
实际案例
https://blog.csdn.net/hl_java/article/details/83721183?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158933777619725222434861%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=158933777619725222434861&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v25-2-83721183.nonecase&utm_term=docker
根据Dockerfile制作镜像
适用于基于某个基线版本来制作镜像的情况
% vi ~/work/docker/lzcubuntu/Dockerfile
# base image
FROM ubuntu:16.04
# MAINTAINER
MAINTAINER lzc.java@icloud.com
# RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
# echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \
# echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \
# echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \
# echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
RUN apt-get update
RUN apt-get install vim -y && apt-get install g++ -y
RUN echo 'alias psl="ps -eo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,etime,command --sort=%cpu |grep java"' >> ~/.bashrc
RUN echo 'alias g++="g++ -std=c++14"' >> ~/.bashrc
RUN echo 'echo "home path is ~"' >> ~/.bashrc
RUN echo 'cd ~' >> ~/.bashrc
% docker build -t lzcubuntu:v1 ~/work/docker/lzcubuntu
Sending build context to Docker daemon 2.048kB
Step 1/8 : FROM ubuntu:16.04
---> 005d2078bdfa
Step 2/8 : MAINTAINER lzc.java@icloud.com
---> Running in 002194b93593
Removing intermediate container 002194b93593
---> 457e6c4eaa32
Step 3/8 : RUN echo 'alias psl="ps -eo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,etime,command --sort=%cpu |grep java"' >> ~/.bashrc
---> Running in 4cf699aec89a
Removing intermediate container 4cf699aec89a
---> 7b69bc414cf6
Step 4/8 : RUN echo 'alias g++="g++ -std=c++14"' >> ~/.bashrc
---> Running in da1fbaa4c919
Removing intermediate container da1fbaa4c919
---> 3d7dcded573a
Step 5/8 : RUN echo 'echo "home path is ~"' >> ~/.bashrc
---> Running in 8ab5a886c362
Removing intermediate container 8ab5a886c362
---> 3fdfc97ed09c
Step 6/8 : RUN echo 'cd ~' >> ~/.bashrc
---> Running in f34b9f8ff87a
Removing intermediate container f34b9f8ff87a
---> a39d09bb72ec
Step 7/8 : RUN apt-get update
---> Running in 235564d10a0e
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [1103 kB]
Get:4 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [626 kB]
Get:6 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6677 B]
Get:7 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:8 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Get:9 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:10 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1470 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [1030 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.7 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8807 B]
Fetched 16.4 MB in 1min 21s (203 kB/s)
Reading package lists...
Removing intermediate container 235564d10a0e
---> da8f992b18d9
Step 8/8 : RUN apt-get install vim -y && apt-get install g++ -y
---> Running in f8197dddd867
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal
libpython3.5-stdlib libsqlite3-0 libssl1.0.0 mime-support vim-common
vim-runtime
Suggested packages:
gpm ctags vim-doc vim-scripts vim-gnome-py2 | vim-gtk-py2 | vim-gtk3-py2
| vim-athena-py2 | vim-nox-py2
......
After this operation, 58.4 MB of additional disk space will be used.
Setting up g++ (4:5.3.1-1ubuntu1) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up manpages-dev (4.04-2) ...
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Removing intermediate container f8197dddd867
---> a37345ce2d96
Successfully built a37345ce2d96
Successfully tagged lzcubuntu:v1
制作好镜像后,剩下的启动与进入容器跟之前的步骤是一致的
docker run -itd --name lzcubuntu1604v1 -v /Users/mac/work:/root/work lzcubuntu:v1
docker exec -it lzcubuntu1604v1 bash
实际案例
https://blog.csdn.net/hl_java/article/details/86248095?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158933781219724846462901%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=158933781219724846462901&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v25-1-86248095.nonecase&utm_term=dockerfile