Docker命令
镜像命令
显示:imges
docker images
docker images -a
docker images -q
docker images -qa
docker images --digests
docker images --digests --no-trunc
搜索:serch
docker search tomcat
docker search --filter=stars=50 tomcat
docker search --filter=stars=50 --no-trunc tomcat
下载:pull
docker pull tomcat = docker pull tomcat:latest
删除:rmi
docker rmi hello-world = docker rmi hello-world:latest
docker rmi -f hello-world
docker rmi -f hello-world nginx
docker rmi -f $(docker images -qa)
提交:commit
docker commit -a="作者名" -m="描述内容" 容器id 容器名:容器tag(eg:1.1)
容器
新建并启动容器
docker run -it 镜像id/容器名 或 docker run -it --name 自定义名 容器名
守护式启动:docker run -d centos 镜像id 或 docker run -d --name 容器名
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
随机分配端口:docker run -it -P tomcat
手动配置端口:docker run -it -p 端口号:8080 tomcat
退出容器
exit :退出并结束
ctrl+p+q :退出不结束,后台运行
查询容器记录
docker ps
docker ps -l
docker ps -a
docker ps -n 3
docker ps -lq
启动容器
docker start 容器id/容器名
重启容器
docker restart 容器id/容器名
停止容器
docker stop 容器id/容器名
docker kill 容器id/容器名
删除容器
docker rm 容器id/容器名
docker rm -f 容器id/容器名
删除所有:docker rm -f $(docker ps -aq) = docker ps -a -q | xargs docker rm
查看容器日志
docker logs 容器id
docker logs -t 容器id
docker logs -t -f 容器id
docker logs -t -f --tail 3 容器id
查看容器内部进程
docker top 容器id
查看容器内部细节
docker inspect 容器id
执行容器内部命令
- 容器内执行命令
- 进入容器
docker attach 容器id 或 docker exec -it 容器id /bin/bash
- 执行命令
命令
- 进入容器
- 容器外执行命令
docker exec -it 容器id 命令
二者区别:
attach:直接进入容器,启动命令终端,不会启动新的进程
exec:在容器中打开新的终端,并可以启动新的进程
容器内文件拷贝到主机
docker cp 容器id:文件目录 保存目录
常用命令
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
容器数据卷
添加方式1
可读写数据卷
docker run -it -v 主机目录:容器内的目录 镜像名
命令添加
eg: docker run -it -v /mydataVolume:/dataVolumeContainer centos
docker inspect 容器id
查看是否绑定成功
只读数据卷
docker run -it -v 主机目录:容器内的目录:ro 镜像名
命令添加docker inspect 容器id
查看是否绑定成功
添加方式2(DockerFile添加)
- 在mydocker文件夹下创建dockerfile
touch dockerfile
- 打开dockerfile,输入以下内容
FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success1" CMD /bin/bash
- 在mydocker文件夹下构造镜像
docker build -f /mydocker/dockerfile -t yyykstudy/centos . 或 docker build -t yyykstudy/centos .
(点不要落下,第二种需要文件名字为dockerfile)
- 新建容器
docker run -it yyykstudy/centos
- 查看容器细节
docker inspect 容器id
数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称(父容器)之为数据卷容器
通过此方式实现容器间的数据共享,若挂载的父容器被删除,则其他子容器继续共享。
- 以yyykstudy/centos为模板创建三个容器c1、c2、c3,且c2c3挂载c1
docker run -it --name c1 yyykstudy/centos
docker run -it --name c2 --volumes-from c1 yyykstudy/centos
docker run -it --name c3 --volumes-from c1 yyykstudy/centos
- 在c3中的dataVolumeContainer1文件夹下创建一个文件且输入内容
- 进入c1或c2中查看此文件
- 若将c1容器删除,可发现c2c3文件仍可同步共享
DockerFile
Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
作用:定制镜像
指令解释
指令 | 解释 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像 |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露的端口 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录 |
ENV | 在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器时要运行的命令(多个CMD,只有最后一个生效) |
ENTRYPOINT | 指定一个容器时要运行的命令(多个此命令,多个命令追加执行) |
ONBUILD | 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,出发父镜像的ONBUILD |
自定义案列解析
- 编辑
FROM centos
MAINTAINER zzyy<zzyybs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#配置数据卷
VOLUME ["/zzyyuse/mydockerfile/tomcat9/test","/usr/local/apache-tomcat-9.0.8/webapps/test"] #测试文件夹
VOLUME ["/zzyyuse/mydockerfile/tomcat9/tomcat9logs/","/usr/local/apache-tomcat-9.0.8/logs"] #日志
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -
- 构建镜像
docker build -t yyykstudy/tomcat9 .
- 新建容器
docker run -d -p 9080:8080 --name myt9 --privileged=true yyykstudy/tomcat9