Docker学习笔记2: 镜像制作实践

镜像制作大体分为两种思路:
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值