本周使用Docker部署了近期开发的项目,在部署过程中熟悉了一下Docker常用命令,现整理成文。
Image操作
-
从repository获取image
# docker pull [OPTION] NAME[:TAG|@DIGEST] [flags] docker pull openjdk:8
-
查看当前image
# docker images docker images # 显示如下信息 # REPOSITORY(repository) TAG(tag) IMAGE ID(镜像ID) CREATED(构造时间) SIZE(镜像大小) # my.java v1 11111768e882 2 days age 300MB
-
删除image
# docker image rm IMAGEID docker image rm 11111768e882
-
运行image
# docker run [OPTION] IMAGE [COMMAND] [ARG...] [flags] docker run -d --name demo my.java:v1 sleep 10000 # -d : 容器后台执行 # --name: 容器命名 # sleep 1000:sleep 1000s
Container操作
-
查看container
# docker ps docker ps # 显示信息如下 # CONTAINER ID(容器ID) IMAGE(对应镜像) COMMAND(容器启动命令) CREATED(容器启动时间) STATUS(容器状态) NAMES(容器名称) 62a03ad1199 my.java:v1 sleep 1000 About an hour ago Update About an hour age demo
-
进入container
# docker exec [OPTION] CONTAINER COMMAND [ARG...] docker exec -ti demo /bin/bash # -t: allocate a pseudo-TTY # -i: Keep STDID open even if not be attached
-
关闭container
# docker stop [OPTION] CONTAINER [CONTAINER...] docker stop 62a03ad1199
-
再次启动container
# docker start [OPTION] CONTAINER [CONTAINER...] [flags] docker start 62a03ad1199
-
删除container
# docker rm [OPTION] CONTAINER [CONTAINER...] docker rm 62a03ad1199
Dockerfile使用
Dockerfile示例
通常我们需要在基础镜像的基础上进行加工,定制适合业务需求的镜像,Dockerfile可以用来解决这个问题。Dockerfile是一个文本文件,包含一条条指令,每条指令构建一层,指令操作描述如何构建镜像。示例如下:
# 文件名称为Dockerfile, 文件内容如下
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
# FROM: 用来指定基础镜像
# RUN: 执行命令,由于Dockerfile中每条指令代表一层, 为此如果多个执行指令可以集中到一层,示例如下:
# RUN mkdir -p /data \
# && echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
Dockerfile构建镜像
# docker build [OPTION] PATH | URL | - [flag]
docker build -t nginx_demo:v1 .
# 利用当前目录下的Dockerfile构建镜像,repository=nginx_demo, tag=v1
# --file: 可指定Dockerfile
几点说明
-
容器可以当做一个Linux进程,因此在启动容器时,如果希望容器一直处于运行状态,要保证容器中的执行命令是前台运行,否则一旦命令执行结束,容器就关闭。
-
对于Linux容器openjdk8版本,为了能够检测容器限制的RAM数量,容器中运行Java时,JVM的启动参数添加
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
-
关于容器和Linux服务器的指定端口映射,在启动容器时利用 -p来指定
# 容器端口9080映射到服务器的9060端口 # 如果指定多个端口,则使用多个 -p参数, -p 9060:9080 -p 8070:8070 docker run -d --name demo my.java:v1 -p 9060:9080 sleep 10000
总结
本文简单总结了服务部署过程中用到的Docker命令和几点注意事项。关于Docker命令还有很多内容,最好的学习方法是通过docker help。
参考文献
Docker从入门到实践
Linux系统下 docker help