docker run -it --name=myContainer myImage /bin/bash // 新建容器并运行
docker exec -it myContainer /bin/bash // 进入容器
vim .bashrc报错vim: command not found
apt-get update // 更新安装源
apt-get install vim // 安装vim
退出来保存新镜像:使用commit存为新镜像
docker commit -m "install vim" myContainer newImage:newTag
docker images // 查看新镜像
重新创建容器测试vim已可用
docker history newImage:newTag // 查看镜像构建历史
(1) FROM
FROM <image>:<tag> # tag可不指定,默认为latest
FROM ubuntu:latest # 基于ubuntu:latest创建镜像
FROM scratch # 不基于任何镜像创建
(2) RUN
# shell格式(常用)
RUN <command> # command为终端操作的shell命令,可以是下载或安装软件等
# exec格式
RUN ["executable", "param1", "param2", ...] # 可理解为可执行文件+参数
RUN apt-get update && apt-get install -y vim # 安装vim
(3) CMD
# 1、shell格式
CMD <command>
# 2、exec命令格式(常用)
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
# 3、该写法是为ENTRYPOINT指令指定的程序提供默认参数
CMD ["<param1>","<param2>",...]
CMD /bin/bash # 启动容器后执行/bin/bash启动shell终端
(4) LABEL
LABEL <key>=<value> <key>=<value> ...
# e.g.
LABEL maintainer="shuaixio@gmail.com"
LABEL version="1.1"
LABEL maintainer="shuaixio@gmail.com" \
version="1.1"
(5) ADD
ADD <src>... <dest>
或
ADD ["<src>",... "<dest>"]
ADD xxx.zip /myzipdir/ # 拷贝后自动加压
ADD test1.txt test2.txt /mydir/ # 拷贝多个文件
(6) COPY
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
COPY file_a file_b /root
COPY ["file_a", "file_b", "/root"]
(7) WORKDIR
WORKDIR /path/to/workdir
# e.g.
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd # 结果是/a/b/c
(8) ENV
ENV <key> <value> # 设置一个
ENV <key1>=<value1> <key2>=<value2> # 设置多个
ENV CUDA_VERSION=11.1.1 # 设置cuda版本,设置完可通过 ${CUDA_VERSION}来访问
(9) VOLUME
VOLUME <path>
或
VOLUME ["<path1>", "<path2>", ...]
(10) EXPOSE
EXPOSE <port1> [<port2> ...]
EXPOSE 80
# 在docker启动时
docker run -P # 宿主机随机端口映射到docker 80端口
docker run -d -p 80:80 nginx:v4cmd # -p设置具体的端口映射
(11) ARG
ARG <key>=<value>
(12) ENTRYPOINT
# 可执行文件+参数
ENTRYPOINT command param1 param2
# shell格式
ENTRYPOINT ["executable", "param1", "param2"]
(13) ONBUILD
ONBUILD [INSTRUCTION]
ONBUILD RUN ls -al
ls -al命令不会在当前镜像中执行,当作为基础镜像时,会在子镜像构建的时候执行ls -al
(14) HEALTHCHECK
# 容器内运行一个命令来检查容器的健康状况
HEALTHCHECK [OPTIONS] CMD command
# 基础镜像中取消健康检查
HEALTHCHECK NONE
# This dockerfile uses the alpine image
# VERSION 1.0
# Author: shuaixio
# base image
FROM nvidia/cuda:11.1.1-cudnn8-runtime-ubuntu18.04
# label info
LABEL maintainer="shuaixio@email.com" version="1.0"
# apt-get: install necessary softwares
RUN apt-get update && apt-get install -y vim wget libxml2 gcc g++ libeigen3-dev pkg-config sqlite3 libsqlite3-dev git autoconf automake libtool unzip libboost-dev && cd ~/
# wget: install cmake3.20.0
RUN wget http://www.cmake.org/files/v3.20/cmake-3.20.0.tar.gz && tar xf cmake-3.20.0.tar.gz && cd cmake-3.20.0 && ./configure && make -j8 && make install && cd ~/
# git clone: install geographiclib
RUN git clone https://github.com/sotex/geographiclib.git && cd geographiclib && mkdir build && cd build && cmake .. && make -j8 && make install && cd ~
# set expose port
EXPOSE 22 80
# /bin/bash after run container
CMD /bin/bash
docker build -t imageName:Tag .
docker history imageId
docker history --no-trunc=true imageId > image_dockerfile
参考文章: docker dockerfile详解 Dockerfile实战 docker-hub官网
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删