Docker基础

一、镜像

1.列出本地镜像

sudo docker images

2.搜索镜像

sudo docker search centos

3.拉取镜像

sudo docker pull centos

4.删除镜像

sudo docker rmi 镜像ID
若报错可能是因为该镜像生成了容器,可以先删除容器再删除镜像,或者强制删除
sudo docker rmi -f  镜像ID

二、容器

1.新建并启动容器

sudo docker run -it 镜像名

-d:后台运行容器,并返回容器ID, 也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

2.列出当前运行的容器

sudo docker ps

	-a :列出所有容器
	-n:显示最近n个创建的容器。
	-q :静默模式,只显示容器编号。

3.退出容器

#容器停止退出
exit 

#容器不停止退出
ctrl+d

4.启动容器

sudo docker start 容器ID

5.重启容器

sudo docker restart 容器ID

6.停止容器

sudo docker stop 容器ID

7.强制停止容器

sudo docker kill 容器ID

8.删除已停止容器

运行中的容器不能删除

#删除指定容器
docker rm -f 容器ID

#一次性删除多个容器
docker rm -f $(docker ps -a -q)

9.后台运行容器

#使用镜像centos以后台模式启动一个容器
sudo docker run -itd centos /bin/bash

10.进入容器

#在使用 -d 参数启动后,容器会进入后台。此时想要进入容器,可以通过以下指令进入:
sudo docker exec -it 容器ID /bin/bash

注意: 这时exit退出,容器不会停止

11.从容器内拷贝文件到主机上

sudo docker cp 容器ID:容器内路径 目的主机路径

12.容器数据卷Volumes

将容器中产生的数据持久化到宿主机,直接命令添加

#不必事先创建目录
sudo docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

三、Dockerfile指令

1.FROM

基础镜像,当前镜像是基于哪个镜像的

#基于centos
FROM centos

2.MAINTAINER

镜像维护者的姓名和邮箱

MAINTAINER      yantao "[email protected]"

3.RUN

在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 层镜像。

4.EXPOSE

当前容器对外暴露的端口

EXPOSE <端口1> [<端口2>...]

5.WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)

WORKDIR <工作目录路径>

6.ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

ENV  ENV	JAVA_HOME	/usr/local/jdk1.8

7.COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

COPY [--chown=:] <源路径1>  <目标路径>#将readme.md文件拷贝进容器/usr/local/路径下COPY readme.txt	/usr/local/readme.txt

[–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

8.ADD

ADD 指令和 COPY 的使用格式一致

ADD 的优点:会自动解压压缩包,但是这会增加构建的时间

9.VOLUME

VOLUME  ["<路径1>", "<路径2>"...]

10.CMD

指定一个容器启动时要运行的命令,它有两个特点
1.在写了多个时候,只会运行最后一个
2.CMD会被docker run 之后的命令替换掉

CMD ["<可执行文件或命令>","","",...] 
CMD ["","",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

11.ENTRYPOINT

1.在写了多个时候,只会运行最后一个

2.不会被docker run 之后的命令替换掉,而是可以接收deocker run 之后的参数作为指令的参数

ENTRYPOINT ["","","",...]

12.ONBUILD

在A文件中写入该指令,B继承A的镜像构建时,会触发该指令,该指令会优先于A的其他指令执行

四、构建镜像

1.构建

#会自动使用Dockerfile
#参数 . 是执行上下文--当前目录,构建中当需要使用本机文件时,就会在这个参数的目录下寻找。
sudo docker build -t nginx:v3 .

#若文件名不是Dockerfile,需要指定文件
sudo docker build -f MyDockerfile2 -t nginx:v3 .

你可能感兴趣的:(Linux,Docker,docker,linux)