Docker使用
docker使用
本文档出自图灵学院公开课:图灵学院官网
菜鸟教程
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.1‐SNAPSHOT.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='‐Xms1028M ‐Xmx1028M ‐Xmn512M ‐Xss512K ‐XX: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
更多推荐
所有评论(0)