我常用的docker基本命令

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。可以通过命令 docker command –help 更深入的了解指定的 Docker 命令使用方法。
例如我们要查看 docker stats 指令的具体使用方法:

1
docker stats --help
docker查找镜像
1
2
3
4
5
6
7
# 查询镜像
docker search 镜像名称

#docker查找官方原版镜像
docker search --filter "is-official=true" centos
#或者
docker search -f is-official=true centos
docker 安装镜像
1
2
3
4
5
6
7
8
#命令语法
docker pull 镜像名称:标签

#安装 tomcat8
docker pull tomcat:8

#安装 mysql5.7
docker pull mysql:5.7
删除images
1
2
3
4
5
6
7
8
9

#若删除不掉,说明有容器正在使用此 images
docker rmi imgId

#先执行
docker rm containerId

#再执行
docker rmi imgId
启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

1
2
3
4
5
6
7
8
9
10
11

#命令语法

docker run <相关参数> <镜像 ID> <初始命令>
docker run -itd --name 自定义容器名称 镜像名称:标签 shell

#运行tomcat8
docker run -p 8080:8080 --name mytomcat tomcat:8

#运行ubuntu镜像
docker run -itd ubuntu /bin/bash
参数说明:
  • -i: 交互式操作。
  • -t: 终端。
  • -d:指定容器的运行模式为后台运行。
  • -P:是容器内部端口随机映射到主机的高端口。
  • -p: 是容器内部端口绑定到指定的主机端口。
  • –name: 标识来命名容器。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:centos:latest。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。

1
2
3
4
5
6
docker run -d --name mysql5.7 -p 3306:3306 -v /usr/local/mysql/data:/var/lib/mysql 
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25


#将windows下F盘的目录javaResource挂载到docker中centos中的/usr/local/src下,docker中可以先设置分享盘符
docker run -it --privileged=true -v /F/javaResource/:/usr/local/src/ 5e35e350aded /bin/bash
要退出终端,直接输入 exit:
通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。
1
2
3
4
5
6
docker inspect repository:tag
docker inspect mysql:5.7

docker inspect 返回的是 JSON 格式的信息,如果您想获取其中指定的一项内容,可以通过 -f 来指定,如获取镜像大小:

docker inspect -f {{".Size"}} mysql:5.7
容器其他命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查看正在运行的容器
docker ps

#查看所有的容器
docker ps -a

#停止容器
docker stop containerId

#启动容器
docker start containerId

#重启容器
docker restart containerId
进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
1
docker exec -it mytomcat bash #在这里用到了上面提到的容器别名mytomcat
什么是 Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  • FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

1
2
3
4
5
6
7
8
#shell格式
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

#exec 格式
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

1
2
3
4
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:

1
2
3
4
FROM centos
RUN 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 层镜像。

开始构建镜像

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 tomcat和jdk整合的镜像:v1(镜像名称:镜像标签)
注:最后的 . 代表本次执行的上下文路径,下一节会介绍。

构建镜像命令

1
2
3
4
5
6
#命令语法 
docker build -t name:tag .
-t 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

# 例如
docker build -t javawebenv:v1 .

Dockerfile内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

FROM centos:7 #使用centos7最新的官方镜像
MAINTAINER samdockerdeveloper
RUN mkdir -p /usr/local/tomcat7 \
&&mkdir -p /usr/local/jdk8
WORKDIR /usr/local/src/ #使用该目录作为工作目录
COPY apache-tomcat-7.0.99.zip /usr/local/src/
COPY jdk-8u131-linux-x64.tar.gz /usr/local/src/
COPY my.cnf /usr/local/src/
RUN yum update -y \
&&yum install -y unzip \
&&unzip apache-tomcat-7.0.99.zip \
&&rpm --import /etc/pki/rpm-gpg/RPM* \
&&cp -R apache-tomcat-7.0.99/* /usr/local/tomcat7 \
&&chmod +x /usr/local/tomcat7/bin/*.sh \
&&tar -xf jdk-8u131-linux-x64.tar.gz -C /usr/local/jdk8 --strip-components 1 # 放弃上级目录解压到/usr/local/jdk8目录下
ENV JAVA_HOME /usr/local/jdk8
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat7
ENV CATALINA_BASE /usr/local/tomcat7
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080 #暴露8080端口
ENTRYPOINT ["/usr/local/tomcat7/bin/catalina.sh","run"]

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker引擎是S。实际的构建过程是在docker引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

使用的过程中遇到的问题
1
2
3
4
5
6
7
8
9
10
11
12
Docker报错“Dockerfile parse error line 1: FROM requires either one or three arguments” 看官方文档Format:
'#' 开头一行被视为评论,出现在其他位置视为参数,也就不难理解报错原因:将写在同一行的注释视为参数了。

Failed to get D-Bus connection: Operation not permitted /etc/init.d/mysqld:
启动命令 docker run -d -p 8080:8080 -v /root/webapps:/usr/local/tomcat7/webapps --name mycentos mycentos:7 /bin/bash

以特权模式运行容器
启动命令改成 docker run -d -p 8080:8080 -v /root/webapps:/usr/local/tomcat7/webapps --name mycentos mycentos:7 /usr/sbin/init

/etc/sysconfig/network 文件夹不存在
编辑/etc/init.d/mysqld 中的 . /etc/sysconfig/network
修改成/etc/sysconfig/network-scripts/ifcfg-lo或者用软连接 ln -s /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network
  • 作者: Sam
  • 发布时间: 2020-01-13 22:00:51
  • 最后更新: 2020-01-14 22:45:55
  • 文章链接: https://ydstudios.gitee.io/post/c9b0a620.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!