Docker常用命令
镜像相关命令
# 查看本机中所有镜像, -a是列出所有镜像,-q只显示镜像id
docker images
# 搜索镜像,会从dockerhub上查询当前镜像。
# -s 指定值:列出收藏数不少于指定值的镜像
# --no-trunc 显示完整的镜像信息
docker search [options] 镜像名
# 从仓库下载镜像
docker pull 镜像名[:TAG|@DIGEST]
# 删除镜像,-f表示强制删除
docker rmi 镜像名/镜像id
容器相关命令
基本命令
1、运行容器。
# 镜像名新建并启动容器, -name表示起别名,-d表示后台启动 -p表示指定端口号启动
# -p 8888:8080,这个意思就是将本机 8888 端口映射到容器的 8080 端口
docker run 镜像名
docker run -d --name myTomcat -P tomcat
docker run -it --name myTomcat -p 8888:8080 tomcat
2、查看容器
# 列出所有正在运行的容器, -a表示正在运行和历史运行过的容器,-q表示只显示容器编号。
docker ps
# 查看停止的容器
docker ps -f status=exited
3、停止、关闭、重启容器。
docker start 容器名字或者容器id --------------- 开启容器
docker restart 容器名或者容器id --------------- 重启容器
docker stop 容器名或者容器id ------------------ 正常停止容器运行
docker kill 容器名或者容器id ------------------ 立即停止容器运行
4、删除容器。
docker rm -f 容器id和容器名
docker rm -f $(docker ps -aq) -------------------------- 删除所有容器
5、查看容器内进行。
docker top 容器id或者容器名
6、查看容器内部细节。
docker inspect 容器id或者容器名
7、查看容器运行日志。
# 查看容器日志,-t表示加入时间戳,-f表示跟随最新的日志打印,--tail 数字表示显示最后多少条
docker logs [OPTIONS] 容器id或容器名
进阶命令
1、进入容器内部。
# 进入容器内部,举例: docker exec -it web1 /bin/bash
# -i 以交互模式运行容器,-t 分配一个伪终端,shell窗口 /bin/bash
docker exec [options] 容器id 容器内命令
2、容器内部安装软件
apt-get update
apt-get install 安装包名称
3、退出容器。
exit 退出容器
4、将容器打包为新的镜像。
docker commit -a="作者" -m="描述信息" 容器ID 目标镜像名称:TAG
5、从容器中复制文件到宿主机目录中。
docker cp 容器id:容器内资源路径 宿主机目录路径 ----------------- 将容器内资源拷贝到主机上
6、设置容器和宿主机共享目录。
docker run -it -v /宿主机的路径:/容器内的路径:ro(只读) 镜像名
注意: 宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
运行 docker inspect 容器id 命令 检查json串里有没有以下内容,如果有则证明卷挂载成功。
"Mounts": [
{
"Type": "bind",
"Source": "/hostDataValueme",
"Destination": "/containerDataValueme",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
拷贝文件到容器
如果我们想要在容器中安装某个软件,需要将软件安装包给拷贝到容器里边,这里展示拷贝一个 hello.txt 文件。
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
# 创建并启动容器mycentos3,并挂载linux中的/usr/local/myhtml目录到容器的/usr/local/myhtml;也就是在linux中的/usr/local/myhtml中操作相当于对容器相应目录操作
docker run -di --name=容器的名字 -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
比如:docker run -di --name=mycentos3 -v /usr/local/myhtml:/usr/local/myhtml centos:7
容器占用内存
# 获取容器pid
ps -ef | grep 0f82cbc53c52
# top命令查看
top -p 2742
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2742 root 20 0 711444 10220 4244 S 0.0 0.2 0:00.07 containerd-shim
备份与恢复
# 打包镜像
docker save 镜像名 -o 名称.tar
# 载入镜像
docker load -i 名称.tar
Dockerfile
什么是Dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker 可以读取 Dockerfile 文件并根据 Dockerfile 文件的描述来构建镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
使用脚本创建镜像
1、创建目录:/opt/dockerjdk8/。
2、下载 jdk-8u144-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /opt/dockerjdk8/ 目录。
3、创建文件 Dockerfile 并 vi Dockerfile,文件名称绝对不能改。
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER yxw
#切换工作目录
WORKDIR /usr
#RUN yum install -y glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
4、执行命令构建镜像。
docker build -t='jdk1.8' .
5、查看镜像是否建立完成。
6、运行容器测试。