前置技能

  • Linux 基础
  • Git 基础

安装环境:

CentOS Docker
7 见官网

帮助指令

本机 docker 的版本

docker version

本机 docker 的详细信息

docker info

HELP,你懂的吧

docker --help

镜像构建信息

docker history xxxx(镜像ID)

镜像指令

列出本机镜像

OPTION

-a:列出本地所有镜像(含中间映像层)

-q:只显示镜像 ID

--digests:显示镜像的摘要信息

--no-trunc:显示完整的镜像信息

docker images

搜索镜像(Docker Hub)

OPTION

-s xx:列出收藏数不小于指定值的镜像

--automated:只列出 automated build 类型的镜像

--no-trunc:显示完整的镜像信息

docker search xxxx(具体镜像名字)

拉取镜像

docker pull xxxx(具体镜像名字)

等价:docker pull xxxx:latest

删除镜像

OPTION

-f:强制删除

# 单个删除:
docker rmi xxxx

等价:docker rmi xxxx:latest

# 多个删除:
docker rmi xxx:TAG xxxx:TAG

# 全部删除:
docker rmi -f $(docker images -qa)

容器指令

新建并启动镜像

OPTION

--name=”容器新名字”: 为容器指定一个名称

-d: 后台运行容器,并返回容器 ID,也即启动守护式容器

-i:以交互模式运行容器,通常与 -t 同时使用

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

-P: 随机端口映射

-p: 指定端口映射,有以下四种格式:

   1. ip:hostPort:containerPort
   2. ip::containerPort
   3. hostPort:containerPort
   4. containerPort
docker run [OPTION] image [COMMAND][ARG...]

# eg:
    docker run -it --name test tomcat [/bin/bash](可不写,默认是这个)

列出当前所有运行的容器

OPTION

-a :列出当前所有正在运行的容器+历史上运行过的

-l :显示最近创建的容器

-n xx:显示最近 xx 个创建的容器

-q :静默模式,只显示容器编号

--no-trunc :不截断输出

docker ps

退出容器

  • 方式一:容器停止退出
exit
  • 方式二:容器不停止退出

    键盘:
    CTRL+P+Q

启动容器

docker start xxxx(容器ID or 容器名称)

重启容器

docker restart xxxx(容器ID or 容器名称)

停止容器

docker stop xxxx(容器ID or 容器名称)

强制停止容器

docker kill xxxx(容器ID or 容器名称)

删除已停止容器

docker rm xxxx(容器ID)

# 多个容器删除:
docker rm -f $(docker ps -aq)

docker ps -aq | xargs docker rm

Docker 其他容器指令

启动守护式容器

注意:若不是一直挂起的指令(eg:top、tail),会自动退出

docker run -d xxxx(容器名)

# 后台启动并挂起eg:
docker run -d tomcat /bin/sh -c "while true;do echo test;sleep 3;done"

每隔3秒打印test到控制台中

查看容器日志

OPTION

-t :加入时间戳

-f :跟随最新的日志打印

--tail xx:显示最后 xx 条

docker logs -f -t --tail xxxx(容器ID)

查看容器内运行的进程

docker top xxxx(容器ID)

查看容器内部细节(JSON 串形式返回)

docker inspect xxxx(容器ID)

进入正在运行的容器并进行命令行交互

# 后面添加[/bin/bash]会进入容器终端,不加则返回结果

# 不仅可以在宿主机直接操作容器,也可以进入容器操作(功能更强)
docker exec -it xxxx(容器ID)

# 直接进入容器中启动命令的终端
docker attach xxxx(容器ID)

容器内拷贝文件到宿主机

docker cp xxxx(容器ID): 容器内路径 目的宿主机路径

Docker 指令使用案例

开启服务器并映射端口

# 分配宿主机8848端口映射该容器的8080端口
docker run -it -p 8848:8080 tomcat

# 随机分配宿主机端口映射该容器的8080端口
docker run -it -P tomcat

# 守护模式开启tomcat服务器
docker run -d -p 8848:8080 tomcat

提交容器副本新镜像

docker commit -m="镜像的描述信息" -a="作者" xxxx(容器ID) 创建的镜像名称(名称空间/原镜像名称):标签名(版本)

直接添加容器数据卷

docker run -it -v /宿主机绝对路径地址:/容器内绝对路径地址 镜像名

# 若报错:cannot open directory .: Permission denied(没遇到)
解决方法:docker run -it -v /宿主机绝对路径地址:/容器内绝对路径地址 --privileged=true 镜像名

# 设置容器只读权限
docker run -it -v /宿主机绝对路径地址:/容器内绝对路径地址:ro 镜像名

DockerFile 添加容器数据卷

  • 第一步 编写 DockerFile
# volume test(可以不加,毕竟就是注释,跟写shell脚本差不多)
FROM tomcat
VOLUME ["/testdataOne","/testdataTwo"]
# 创建新容器时显示
CMD echo "This is test"
CMD /bin/bash

# 大致相当:(host1、host2在运行容器时会默认创建,需要使用docker inspect 指令获取)
docker run it -v /host1:/testdataOne -v /host2:/testdataTwo tomcat /bin/bash
  • 第二步 根据编写的 DockerFile 文件构建新的镜像
# 若当前目录就是需要执行DockerFile文件所在目录,-f参数可以不写
docker build -f 指定DockerFile文件在宿主机上的决定路径 -t 新建镜像的名称 .
  • 第三步 运行新建的镜像(数据卷就会被自动创建)

容器间传递共享

docker run -ti --name xxxx(新建容器命名) --volumes-from xxxx(传递数据卷的容器名称) 镜像

自制镜像上云

–> 阿里云

将制作好的镜像推送上云,具体指令见操作台