Docker常用命令

镜像相关命令

  1. # 查看本机中所有镜像, -a是列出所有镜像,-q只显示镜像id
  2. docker images
  3. # 搜索镜像,会从dockerhub上查询当前镜像。
  4. # -s 指定值:列出收藏数不少于指定值的镜像
  5. # --no-trunc 显示完整的镜像信息
  6. docker search [options] 镜像名
  7. # 从仓库下载镜像
  8. docker pull 镜像名[:TAG|@DIGEST]
  9. # 删除镜像,-f表示强制删除
  10. docker rmi 镜像名/镜像id

容器相关命令

基本命令

1、运行容器。

  1. # 镜像名新建并启动容器, -name表示起别名,-d表示后台启动 -p表示指定端口号启动
  2. # -p 8888:8080,这个意思就是将本机 8888 端口映射到容器的 8080 端口
  3. docker run 镜像名
  4. docker run -d --name myTomcat -P tomcat
  5. docker run -it --name myTomcat -p 8888:8080 tomcat

2、查看容器

  1. # 列出所有正在运行的容器, -a表示正在运行和历史运行过的容器,-q表示只显示容器编号。
  2. docker ps
  3. # 查看停止的容器
  4. docker ps -f status=exited

3、停止、关闭、重启容器。

  1. docker start 容器名字或者容器id --------------- 开启容器
  2. docker restart 容器名或者容器id --------------- 重启容器
  3. docker stop 容器名或者容器id ------------------ 正常停止容器运行
  4. docker kill 容器名或者容器id ------------------ 立即停止容器运行

4、删除容器。

  1. docker rm -f 容器id和容器名
  2. docker rm -f $(docker ps -aq) -------------------------- 删除所有容器

5、查看容器内进行。

  1. docker top 容器id或者容器名

6、查看容器内部细节。

  1. docker inspect 容器id或者容器名

7、查看容器运行日志。

  1. # 查看容器日志,-t表示加入时间戳,-f表示跟随最新的日志打印,--tail 数字表示显示最后多少条
  2. docker logs [OPTIONS] 容器id或容器名

进阶命令

1、进入容器内部。

  1. # 进入容器内部,举例: docker exec -it web1 /bin/bash
  2. # -i 以交互模式运行容器,-t 分配一个伪终端,shell窗口 /bin/bash
  3. docker exec [options] 容器id 容器内命令

image.png
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 文件。
image.png

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器 添加-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、查看镜像是否建立完成。
image.png
6、运行容器测试。
image.png