镜像制作大体分为两种思路:
1、docker commit
2、docker build + Dockerfile
docker commit
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS:常用的为-a=作者,-m=描述信息
--author , -a Author (e.g., “John Hannibal Smith hannibal@a-team.com”)
--change , -c Apply Dockerfile instruction to the created image
--message , -m Commit message
--pause , -p Pause container during commit
例子:
#先run起来一个docker 容器
sudo docker run --rm -itd <repository>:<tag> /bin/bash
#在容器里随意搞事情
#退出容器,可以用ctrl+p+q,也可以直接exit,因为docker run时使用了-d后台运行
exit
#docker commit
sudo docker commit -a "garry" -m "init" <容器id> <目标仓库名>:<tag>
#此时使用docker images查看本地镜像,就会多出来一个<目标仓库名>:<tag>的镜像
sudo docker images
docker commit的缺点:
1、docker commit 的操作除了修改人知道作了何种改动以外,别人无从而知,而且由于命令的执行,还有额外一连串的文件被改动。所以一般情况下,慎用 docker commit
2、docker镜像分层堆叠存储,每一层在前一层的基础上进行修改;容器同样也是如此,以镜像为基础层,在其上加一层读写层用于交互,每一次docker commit实际上就是一层,commit次数过多会导致镜像十分臃肿
因此强烈建议大家使用Dockerfile构建自己的镜像
Dockerfile
先给一个我自己写的配置PCL的Dockerfile,Dockerfile需要与你想打到docker里的文件一起,放在一个文件夹下
FROM registry.cn-shanghai.aliyuncs.com/xxx/xxx:1.0.0
LABEL maintainer="xuye.zxy" description="tools for point cloud process" version="1.0"
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
#WORKDIR /usr/local/bin
#COPY CloudProcess /usr/local/bin/CloudProcess
RUN apt-get update && apt-get install -y --no-install-recommends \
git build-essential linux-libc-dev \
cmake cmake-gui \
libusb-1.0-0-dev libusb-dev libudev-dev \
mpi-default-dev openmpi-bin openmpi-common \
libflann1.8 libflann-dev \
libeigen3-dev \
libboost-all-dev \
libvtk5.10-qt4 libvtk5.10 libvtk5-dev \
libqhull* libgtest-dev \
freeglut3-dev pkg-config \
libxmu-dev libxi-dev \
mono-complete \
qt-sdk openjdk-8-jdk openjdk-8-jre \
libyaml-cpp-dev \
libgoogle-glog-dev \
&& apt-get clean && apt-get autoclean
# get pcl
RUN git clone https://github.com/PointCloudLibrary/pcl.git ~/pcl
RUN mkdir ~/pcl/release && cd ~/pcl/release && cmake \
-DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON \
-DCMAKE_INSTALL_PREFIX=/usr ~/pcl
RUN cd ~/pcl/release && make && make install
1、FROM:第一条指令,确定使用的基础镜像
2、RUN:执行命令
3、COPY:复制,但只能复制当前文件夹下的内容
4、WORKDIR:指定工作目录,相当于mkdir WORKDIR && cd WORKDIR
此外还有很多其他指令,建议参考:
Dockerfile详解超全
Docker Dockerfile
定义好dockerfile后,就可以docker build:
docker build [OPTIONS] PATH | URL | -
直接给例子:
#sudo docker build -t <repository>:<tag> .
#最后有个.表示在当前目录执行
sudo docker build -t test:1.0.0 .
#此时docker imnages查看本地镜像,就会发现多出一个test:1.0.0
sudo docker images
Dockerfile在apt-get时速度过慢怎么办??
在RUN apt-get前加上两句话:
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
docker push
有个本地镜像,最后一步就是使用docker push将本地镜像push到dockerhub
1、首先需要登录docker hub
sudo docker login
2、重命名本地镜像
sudo docker tag <imageID> <username>/<repository>:<tag>
3、docker push
sudo docker push username/repository:tag
docker pull
从docker hub下载镜像:
sudo docker pull repository:tag