sudo docker images
sudo docker search centos
sudo docker pull centos
sudo docker rmi 镜像ID
若报错可能是因为该镜像生成了容器,可以先删除容器再删除镜像,或者强制删除
sudo docker rmi -f 镜像ID
sudo docker run -it 镜像名
-d:后台运行容器,并返回容器ID, 也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
sudo docker ps
-a :列出所有容器
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
#容器停止退出
exit
#容器不停止退出
ctrl+d
sudo docker start 容器ID
sudo docker restart 容器ID
sudo docker stop 容器ID
sudo docker kill 容器ID
运行中的容器不能删除
#删除指定容器
docker rm -f 容器ID
#一次性删除多个容器
docker rm -f $(docker ps -a -q)
#使用镜像centos以后台模式启动一个容器
sudo docker run -itd centos /bin/bash
#在使用 -d 参数启动后,容器会进入后台。此时想要进入容器,可以通过以下指令进入:
sudo docker exec -it 容器ID /bin/bash
注意: 这时exit退出,容器不会停止
sudo docker cp 容器ID:容器内路径 目的主机路径
将容器中产生的数据持久化到宿主机,直接命令添加
#不必事先创建目录
sudo docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
基础镜像,当前镜像是基于哪个镜像的
#基于centos
FROM centos
镜像维护者的姓名和邮箱
MAINTAINER yantao "[email protected]"
在build时,让容器运行命令
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
#基于centos
FROM centos
#安装wgetRUN yum install wgetRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"RUN tar -xvf redis.tar.gz
#以上执行会创建 3 层镜像。可简化为以下格式:
FROM centosRUN yum install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
当前容器对外暴露的端口
EXPOSE <端口1> [<端口2>...]
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)
WORKDIR <工作目录路径>
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
ENV ENV JAVA_HOME /usr/local/jdk1.8
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
COPY [--chown=:] <源路径1> <目标路径>#将readme.md文件拷贝进容器/usr/local/路径下COPY readme.txt /usr/local/readme.txt
[–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。
ADD 指令和 COPY 的使用格式一致
ADD 的优点:会自动解压压缩包,但是这会增加构建的时间
VOLUME ["<路径1>", "<路径2>"...]
指定一个容器启动时要运行的命令,它有两个特点
1.在写了多个时候,只会运行最后一个
2.CMD会被docker run 之后的命令替换掉
CMD ["<可执行文件或命令>","","",...]
CMD ["","",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
1.在写了多个时候,只会运行最后一个
2.不会被docker run 之后的命令替换掉,而是可以接收deocker run 之后的参数作为指令的参数
ENTRYPOINT ["","","",...]
在A文件中写入该指令,B继承A的镜像构建时,会触发该指令,该指令会优先于A的其他指令执行
#会自动使用Dockerfile
#参数 . 是执行上下文--当前目录,构建中当需要使用本机文件时,就会在这个参数的目录下寻找。
sudo docker build -t nginx:v3 .
#若文件名不是Dockerfile,需要指定文件
sudo docker build -f MyDockerfile2 -t nginx:v3 .