Docker常用指令
- 查看本地所有镜像
docker images
docker images -q # 查看所有镜像id
- 搜索镜像
docker search 镜像名称
- 查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
- 创建并启动容器
docker run 参数
参数:
-i:保持容器运行,通常与-t同时使用,加入it两个参数后,容器创建后自动进入容 器中,退出容器后,容器自动关闭
-t:为容器重新分配一个伪输入终端
-d:以守护模式运行容器,创建一个容器在后台运行,需要docker exec进入容 器,退出后容器不会关闭
--name:为创建的容器命名
docker run -it --name=c1 centos:7 /bin/bash
docker run -id --name=c2 centos:7
docker exec -it c2 /bin/bash
-
进入容器
docker exec 参数 # 退出容器,容器不会关闭
-
停止容器
docker stop 容器名称
-
启动容器
docker start 容器名称
-
删除容器
docker rm 容器名称
-
查看容器信息
docker inspect 容器名称
-
配置数据卷(宿主机和容器双向绑定共享数据)
docker run -v 宿主机目录:容器内目录
-
配置数据卷容器
1.创建启动数据卷容器,使用-v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2.创建启动c1 c2容器,使用--volumes-from参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
Docker应用部署
部署Mysql
1.搜索镜像
docker search mysql
2.拉取镜像
docker pull mysql:5.7
3.创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql的数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
-
参数说明:
-
-p 3307:3306:将容器的3306端口映射到宿主机的3307端口
-
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到/etc/mysql/my.cnf 配置目录
-
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs。日志目录
-
-v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql。数据目录
-
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-
Tomcat部署
-
搜索tomcat镜像
docker search tomcat
-
拉取tomcat镜像
docker pull tomcat
3.创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
-
参数说明:
- -p 8080:8080:将容器的8080端口映射到主机的8080端口
- -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
部署Redis
-
搜索redis镜像
docker search redis
-
拉取redis镜像
docker pull redis:5.0
-
创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
-
使用外部机器连接redis
./redis-cli.exe -h {host} -p 6379
镜像制作
-
容器转为镜像
docker commit 容器id 镜像名称:版本号 docker save -o 压缩文件名称 镜像名称:版本号 docker load -i 压缩文件名称
-
Dockerfile
常用指令
1.FROM
格式为FROM image或FROM image:tag,并且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。2.MAINTAINER
格式为MAINTAINER user_name user_email,指定维护者信息3.RUN
格式为RUN command或 RUN ["EXECUTABLE","PARAM1","PARAM2".....],前者在shell终端中运行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";后者使用exec执行,指定其他运行终端使用RUN["/bin/bash","-c","echo hello"]4.CMD
支持三种格式:
CMD ["executable","param1","param2"],使用exec执行,这是推荐的方式。
CMD command param1 param2 在/bin/sh中执行。
CMD ["param1","param2"] 提供给ENTERYPOINT的默认参数。
CMD用于指定容器启动时执行的命令,每个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令。5.EXPOSE
格式为 EXPOSE port [port2,port3,...],例如EXPOSE 80这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。
在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。6.ENV
格式为:EVN key value 。用于指定环境变量,这些环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量。
例如
ENV word hello
RUN echo $word7.ADD
格式:ADD src dest
该命令将复制指定本地目录中的文件到容器中的dest中,src可以是是一个绝对路径,也可以是一个URL或一个tar文件,tar文件会自动解压为目录。8.COPY
格式为:COPY src desc
复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。9.ENTRYPOINT
格式有两种:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2 会在shell中执行。
用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。10.VOLUME
格式为 VOLUME ["/data"]
作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。11.USER
格式为:USER username
指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。
例如:RUN groupadd -r docker && useradd -r -g docker docker12.WORKDIR
格式: WORKDIR /path
为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。13.ONBUILD
格式ONBUILD [INSTRUCTION]
该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令。
例如下面的Dockerfile创建了镜像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py则基于镜像A创建新的镜像时,新的Dockerfile中使用from A 指定基镜像时,会自动执行ONBBUILD指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令:
FROM A
ADD ./app
RUN python app.py14.docker build
创建好Dockerfile之后,通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。
通常建议放置Dockerfile的目录为空目录。另外可以在目录下创建.dockerignore文件,让Docker忽略路径下的文件和目录,这一点与Git中的配置很相似。通过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . ##"."指定的是Dockerfile所在的路径
Docker file 案例
需求:
定义dockerfile,发布springboot项目
实现步骤:
1. 定义父镜像: FROM java:8
2. 定义作者信息:MAINTAINER fk< 1762845033@qq.com >
3. 将jar包添加到容器:ADD springboot.jar app.jar
4. 定义容器启动执行的命令:CMD java -jar app.jar
5. 通过dockerfile构建镜像 docker build -f dockerfile文件路径 -t 镜像名称:版本 .
需求:
自定义centos:7镜像,要求:
1.默认登录路径为/usr
2.可以使用vim
实现步骤:
1.定义父镜像:FROM centos:7
2.定义作者信息:MAINTAINER fk
3.执行安装vim命令: RUN yum install -y vim
4.定义默认的工作目录:WORKDIR /usr
5.定义容器启动执行的命令:CMD /bin/bash