本文档出自图灵学院公开课:图灵学院官网
菜鸟教程
Docker使用
安装参考:安装教程

安装参考:安装教程

卸载docker

1 yum remove ‐y docker*
2 rm ‐rf /etc/systemd/system/docker.service.d
3 rm ‐rf /var/lib/docker
4 rm ‐rf /var/run/docker

重启docker

1 systemctl daemon‐reload
2 systemctl restart docker

Docker常用命令
1.搜索镜像(以java举例)

 docker search java

在这里插入图片描述
以上列表包含五列,含义如下:

  • NAME:镜像仓库名称。
  • DESCRIPTION:镜像仓库描述。
  • STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0
  • OFFICAL:表示是否为官方仓库,该列标记为[0K]的镜像均由各软件的官方项目组创建和维护。
  • AUTOMATED:表示是否是自动构建的镜像仓库

2.下载镜像

使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最
新版本
的 Java镜像。如果要下载指定版本则在java后面加冒号指定版本,例如:docker pull java:8

docker pull java:8

3.列出镜像
使用 docker images命令即可列出已下载的镜像

docker images

在这里插入图片描述
以上列表含义如下

  • REPOSITORY:镜像所属仓库名称。
  • TAG:镜像标签。默认是 latest,表示最新。
  • IMAGE ID:镜像 ID,表示镜像唯一标识。
  • CREATED:镜像创建时间。
  • SIZE: 镜像大小。

4、删除本地镜像
强制删除加 -f

docker rmi java

删除所有镜像

docker rmi $(docker images ‐q)

容器相关命令
1、新建并启动容器
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。
-d选项:表示后台运行
-P选项:随机端口映射
-p选项:指定端口映射,有以下四种格式。

  • – ip:hostPort:containerPort
  • – ip::containerPort
  • – hostPort:containerPort
  • – containerPort

–net选项:指定网络模式,该选项有以下可选参数:

  • –net=bridge:默认选项,表示连接到默认的网桥。
  • –net=host:容器使用宿主机的网络。
  • –net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
  • –net=none:不配置该容器的网络,用户可自定义网络配置。
docker run ‐d ‐p 91:80 nginx

这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
访问 http://Docker宿主机 IP:91/,将会看到nginx的主界面如下:
在这里插入图片描述
需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就
会自动从 Docker Hub下载镜像并启动一个 Docker容器。
2、列出容器

docker ps

在这里插入图片描述
如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下

  • CONTAINER_ID:表示容器 ID。
  • IMAGE:表示镜像名称。
  • COMMAND:表示启动容器时运行的命令。
  • CREATED:表示容器的创建时间。
  • STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
  • PORTS:表示容器对外的端口号。
  • NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–name选项自行指定。
    3、停止容器
docker stop 容器id

4、强制停止容器

docker kill 容器id

5、启动已停止的容器

docker start 容器id

6、查看容器所有信息

docker inspect 容器id

7、查看容器日志

docker container logs 容器id

8、查看容器里的进程

docker top 容器id

9、容器与宿主机相互复制文件

  • 从容器里面拷文件到宿主机:
1 docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径
2 如:docker cp 7aa5dc458f9d:/etc/nginx/nginx.conf /mydata/nginx
  • 从宿主机拷文件到容器里面:
docker cp 要拷贝的宿主机文件路径 容器id:要拷贝到容器里面对应的路径

10、进入容器
使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这
个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了

 docker exec ‐it f0b1c8ab3633 /bin/bash (有的容器需要把 /bin/bash 换成 sh)

11.容器内安装vim、ping、ifconfig等指令

1 apt‐get update
2 apt‐get install vim #安装vim
3 apt‐get install iputils‐ping #安装ping
4 apt‐get install net‐tools #安装ifconfig

12、删除容器
只能删除已停止的容器

docker rm 容器id

强制删除所有容器(慎用)

docker rm ‐f $(docker ps ‐a ‐q)

使用Dockerfile构建Docker镜像
Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节
先来编写一个最简单的Dockerfile,以前文下载的Nginx镜像为例,来编写一个Dockerfile修改该Nginx镜像的首页
1、新建一个空文件夹docker-demo,在里面再新建文件夹app,在app目录下新建一个名为Dockerfile的文件,在里面增加如
下内容:

1 FROM nginx
2 RUN echo '<h1>This is Tuling Nginx!!!</h1>' > /usr/share/nginx/html/index.html

该Dockerfile非常简单,其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像, RUN指令用于执行命
令。
2、在Dockerfile所在路径执行以下命令构建镜像:

docker build ‐t nginx:tuling .

其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径
3、执行以下命令,即可使用该镜像启动一个 Docker容器

docker run ‐d ‐p 92:80 nginx:tuling

4、访问 http://Docker宿主机IP:92/,可看到下图所示界面
在这里插入图片描述
Dockerfile常用指令

命令 用途
FROM 基础镜像文件
RUN 构建镜像阶段执行命令
ADD 添加文件,从src目录复制文件到容器的dest,其中 src可以是Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包
COPY 拷贝文件,和ADD命令类似,但不支持URL和压缩包
CMD 容器启动后执行命令
EXPOSE 声明容器在运行时对外提供的服务端口
WORKDIR 指定容器工作路径
ENV 指定环境变量
ENTRYPINT 容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。
USER 该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、CMD以及 ENTRYPOINT指令都将使用该用户执行命令。
VOLUME 指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。格式为:VOLUME[“/data”]。

注意:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另
外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命
令。

使用Dockerfile构建微服务镜像
以项目05-ms-eureka-server为例,将该微服务的可运行jar包构建成docker镜像

1、将jar包上传linux服务器/usr/local/docker-app/docker-demo/app/eureka目录,在jar包所在目录创建名为Dockerfile的文

2、在Dockerfile中添加以下内容

1 # 基于哪个镜像
2 From java:8
3 # 复制文件到容器
4 COPY microservice‐eureka‐server‐0.0.1SNAPSHOT.jar /app.jar
5 # 声明需要暴露的端口
6 EXPOSE 8761
7 # 配置容器启动后执行的命令
8 ENTRYPOINT java ${JAVA_OPTS} ‐jar /app.jar

3、使用docker build命令构建镜像

docker build ‐t microservice‐eureka‐server:0.0.1 .

格式: docker build -t 镜像名称:标签 Dockerfile的相对位置

在这里,使用-t选项指定了镜像的标签。执行该命令后,终端将会输出如下的内容
在这里插入图片描述4、启动镜像,加-d可在后台启动

docker run ‐d ‐p 8761:8761 microservice‐eureka‐server:0.0.1

使用 -v 可以挂载一个主机上的目录到容器的目录

 docker run ‐d ‐p 8761:8761 ‐v /log:/container‐log microservice‐eureka‐server:0.0.1

加上JVM参数:

1 # ‐‐cap‐add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo,jmap这些命令,如果不需要在容器里执
行这些命令可以不加
2 docker run ‐e JAVA_OPTS='‐Xms1028MXmx1028MXmn512MXss512KXX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=
256M' ‐‐cap‐add=SYS_PTRACE ‐d ‐p 8761:8761 microservice‐eureka‐server:0.0.1

5、访问http://Docker宿主机IP:8761/,可正常显示Eureka Server首页
在这里插入图片描述
将微服务镜像发布到远程镜像仓库
我们制作好了微服务镜像,一般需要发布到镜像仓库供别人使用,我们可以选择自建镜像仓库,也可以直接使用docker官方镜像
仓库,这里我们选择docker官方镜像仓库:https://hub.docker.com/
首先,我们需要在docke官方镜像仓库里注册一个账号
然后,在linux服务器上用docker login命令登录镜像仓库
在这里插入图片描述要把镜像推送到镜像仓库,需要将镜像前面加个分组名(一般就是docker hub的账户名),执行如下命令修改镜像名字

docker tag microservice‐eureka‐server:0.0.1 zhuge666/microservice‐eureka‐server:0.0.1

最后将镜像推送到远程仓库

docker push zhuge666/microservice‐eureka‐server:0.0.1

在这里插入图片描述

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐