Docker的安装及使用

记录 Docker 在 CentOS7 下的安装与常用命令

环境:

  • CentOS7

安装 Docker

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

非最新版本安装

$ sudo yum install docker

最新版本安装

1
2
3
$ sudo yum install -y yum-utils 
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docke r-ce.repo
$ sudo yum install docker-ce

查看 Docker 版本

docker version

docker info

启动 Docker

$ sudo service docker start

设置随系统启动

$ sudo chkconfig docker on

Docker 的基本操作

容器操作

docker [run|start|stop|restart|kill|rm|pause|unpause]

  • docker run/create [镜像名]
    创建一个新的容器并运行一个命令
  • docker start/stop/restart [容器名]
    启动/停止/重启一个容器
  • docker kill [容器名]
    杀死容器,不等待进程的响应时间
  • docker rm [容器名]
    删除已经停止的容器
  • docker pause/unpause [容器名]
    暂停/恢复容器中的进程

docker [ps|inspect|exec|logs|export|import]

  • docker ps [-a]
    查看容器列表(默认查看运行时的容器,-a 查看所有容器)
  • docker inspect [容器名]
    查看容器配置元数据
  • docker exec -it [容器名] /bin/bash
    进入容器环境中交互操作
  • docker logs --since="2021-08-01" -f --tail=10 [容器名]
    查看容器日志
  • docker cp path1 [容器名]:path
    容器与主机之间的数据拷贝
  • docker export -o test.tar [容器名]
    docker export [容器名] >test.tar
    文件系统作为一个 tar 归档文件
  • docker import test.tar [镜像名:版本号]
    导入归档文件,成为一个镜像

镜像操作

docker images|rmi|tag|build|history|save|load]

  • docker images
    列出本地镜像列表
  • docker rmi [镜像名:版本号]
    删除镜像
  • docker tag [镜像名:版本号][仓库]
    标记本地镜像,将其归入某一仓库
  • docker build -t [镜像名:版本号] [path]
    Dockerfile 创建镜像
  • docker history [镜像名:版本号]
    查看指定镜像的创建历史
  • docker save -o xxx.tar [镜像名:版本号]
    docker save [镜像名:版本号] > xxx.tar
    将镜像保存成 tar 归档文件
  • docker load --input xxx.tar
    docker load < xxx.tar
    从归档文件加载镜像

交互式创建容器并进入

启动 docker 前台进程
docker run -it --name [镜像名:版本号] /bin/bash

退出并关闭容器
exit

退出不关闭容器
Ctrl + P + Q

启动 docker 后台进程
docker run -d --name [镜像名:版本号] /bin/bash

进入已运行的容器
docker exec -it [容器名] /bin/bash

Docker 容器的主业

在 Docker 理念中,容器启动时,应当为它指定主业是什么,如 nginx 的容器主业是 nginx 代理服务,tomcat 容器的主业是 web 服务等。

容器创建时,必须指定主业任务,如不指定,则容器退出。

在 dockerfile 打包镜像时,可以使用 cmd 命令来指定一个默认的主业,如:

1
2
3
4
5
# base image
FROM cent-ngx2:latest

ENV PATH /usr/local/nginx/sbin:$PATH
CMD ["/bin/bash", "-c", "nginx -g'daemon off;'"]

既然镜像里是默认主业,则意味着在创建容器时,可以覆盖此默认命令,如:

1
docker run -d --name test2 2825bf46c0e8 echo "hello"

推荐的 ENTRYPOINT 方式

镜像本身应该有稳定的主业,应当指定后不能更改用途,于是引入 ENTRYPOINT,使用 ENTRYPOINT 定义容器入口,它不能被 run 中的 CMD 命令覆盖,如:

1
2
3
4
5
6
# base image
FROM nginxx:v1

ENV PATH /usr/local/nginx/sbin:$PATH
ENTRYPOINT ["nginx"] #指定入口命令为 nginx 服务
CMD ["-g","daemon off;"] #指定 nginx 命令的参数

执行 docker build -t nginxx:v3

手动打包 SpringBoot 镜像

  1. 将 SpringBoot 打包好的 jar 包上传

  2. 在同级目录下,创建 Dockerfile 文件

    1
    2
    3
    4
    5
    [root@localhost web]# vi Dockerfile
    FROM openjdk:8 #含 jdk8 的镜像
    ADD ["member-1.0.jar", "web.jar"]
    EXPOSE 8090
    ENTRYPOINT ["java", "-jar", "/web.jar"] #入口命令启动jar
  3. dockerfile 打包业务镜像

    1
    2
    3
    4
    5
    [root@localhost web]# docker build -t member:v1
    Sending build context to Docker deamon 17.69 MB
    Step 1/4 : FROM openjdk:8
    ...
    Successfully built 10437e588305
  4. 启动镜像,即得到业务运行
    docker run -d -p 8090:8090 --name member member:v1

  5. 打开浏览器校验页面