1.Docker 安装

卸载原docker(不自带不用作)

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine       

安装依赖和设置仓库地址

# 安装依赖
yum install -y yum-utils
# 添加仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 觉得慢,可以设置国内镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all & yum makecache

rm -f /var/run/yum.pid

安装

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动与测试

# 启动
systemctl start docker
# 查看版本
docker version
# 测试运行
docker run hello-world
# 开机自启
systemctl enable docker

卸载docker

# 删包
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 删文件
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

2. Docker 常用命令

2.1 帮助命令

# 帮助命令
docker 命令 --help
# 查看版本
docker version
# docker的系统信息
docker info

在线帮助文档:https://docs.docker.com/reference/

2.2 镜像命令

# 查看镜像列表
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest 9c7a54a9a43c 5 months ago 13.3kB

  • -a, --all # 显示所有(包括隐藏)
  • -q, --quiet # 只显示ID
# 在 dockerhub 搜索镜像
docker search 关键词 
  • -f, --filter filter 过滤例如--filter=START=3000 星标大于3000
# 下载镜像(不写版本默认lastest最新)
docker pull 关键词:版本
# 指定版本下载
docker pull mysql:5.7
# 删除镜像
docker rmi 镜像ID 镜像ID...
# 删除全部镜像
docker rmi $(docker images -aq)

2.3 容器命令

docker pull centos
# 运行命令
docker run 镜像
  • --name 容器名字

  • -d 后台运行

  • -it 交互方式运行

  • -P 指定端口

    • -p 主机端口:容器端口

    • -p ip:主机端口:容器端口

    • -p 容器端口

  • -p 随机端口

# 启动、测试
[root@node1 ~]# docker run -it centos bash
[root@544d6c37f4af /]#
# 退出容器
[root@544d6c37f4af /]# exit
exit
[root@node1 ~]#
# 查看正在运行的容器
docker ps
  • -a 全部容器(包括已经退出的)
  • -n=数字 最近运行的几个容器
  • -q 只显示ID
# 容器停止并退出
exit
# 退出容器不停止
Ctrl + P +Q
# 删除容器,不能删除正在运行的容器
docker rm 容器ID
# 删除全部(强制)
docker rm -f $(docker ps -aq)
# 启动、重启、停止、强制停止容器
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器ID
# 显示log
docker log -tf --tail 数字
  • -f 循环输出

  • -t 显示时间

  • --tail + 数字 显示的条数

# 查看容器中的进程信息
docker top 容器ID
# 查看容器的元数据
docker inspect 容器ID
# 进入当前正在运行的容器
# 开启一个新的终端
docker exec -it 容器ID bash

# 进入容器
docker attach 容器ID
# docker 容器和主机复制文件
docker cp 容器ID
# 打包镜像
docker commit -a 作者 -m 描述 容器ID 镜像名称
参数 介绍
-a : 提交的镜像作者
-c : 使用Dockerfile指令来创建镜像
**-m ** 提交时的说明文字
**-p ** 在commit时,将容器暂停。

3. WebUI 可视化

# 拉取
docker pull portainer/portainer
# 运行
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

打开 http://localhost:9000/,完成账户创建,

选择Get Started - Proceed using the local environment which Portainer is running in即可完成配置

都可视化了,内容也没什么好讲解了

4. Docker 镜像

4.1 容器数据卷

运行时创建挂载

docker run -it -v 主机目录:容器目录

# 把主机目录挂载到容器中
mkdir ceshi
docker run -it -v $PWD/ceshi:/home centos

容器即使重启依旧会保留挂载

测试安装运行Mysql

docker run -d -p 3310:3306 -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7

使用方法: docker volume 命令

  • create 创建一个volume

  • inspect 展示volume的详细信息

  • ls 列出所有的volume

    docker volume ls
    
    # DRIVER    VOLUME NAME
    # local     07ecb5d394551af2c70149026ef07b7da4b05de9fedc64cc1e8c0ae4f1f8699d
    # local     e86b118a8373a31957c9cd0ba8a40fca980a4e813e223f82f8036a7e3afb9819
    # local     portainer_data
    
  • prune 移除未使用的volume

  • rm 移出一个或多个volume

具名挂载、匿名挂载和指定路径挂载

没有指定目录的情况下默认目录是/var/lib/docker/volumes

  • 匿名挂载:

    docker run -v 容器内路径 镜像名称

  • 具名挂载:
    docker run -v 卷名(volume name):容器内路径 镜像名称

  • 指定路径挂载

    docker run -v /宿主机路径:容器内路径 镜像名称

4.2 Dockerfile

通过编写Dockerfile文件,可以轻松地构建出自己所需的Docker镜像。

Dockerfile是一种文本文件,用于定义Docker镜像的构建过程。它包含了一系列的指令和参数,用于指导Docker引擎在构建镜像时执行一系列的操作,例如安装软件包、设置环境变量、拷贝文件等。

Dockerfile通常包含以下几个部分:

  1. 基础镜像:指定要使用的基础镜像,例如Ubuntu、CentOS等。
  2. 维护者信息:指定Docker镜像的维护者信息。
  3. 环境变量:设置Docker容器的环境变量。
  4. 安装软件包:使用apt-get、yum等包管理器安装需要的软件包。
  5. 拷贝文件:将本地文件或目录拷贝到Docker镜像中。
  6. 运行命令:在Docker镜像中运行命令,例如启动服务等。
  7. 暴露端口:指定Docker容器需要暴露的端口号。

4.2.1 Dockerfile 构建过程

基础知识:

  1. 每个保留关键字(指令)都是必须是大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!
指令 作用
FROM 这个镜像的妈妈是谁? (指定基础镜像)
MAINTAINER 告诉别人,谁负责养它? (指定维护者信息)
RUN 你想让它干啥 (在命令前面加上RUN即可)
ADD 给它点创业资金 (COPY文件,会自动解压)
WORKDIR 我是cd,今天刚化了妆 (设置当前工作目录)
VOLUME 给它一个存放行李的地方 (设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥 (指定对外的端口)
CMD 启动时要运行的命令,只有最后一个生效
ENTERPOINT 启动时要运行的命令,可以追加
OUYTBUILD 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令
COPY 类似ADD , 把文件拷贝到镜像
ENV 构建时的环境变量

构建一个centos7

FROM centos:7
MAINTAINER 123<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---END---"
CMD bash

构建文件

docker build -f 文件 -t 镜像名称:TAG版本 .
# 最后有一个点!
# 如果已经有Dockerfile,就不需要-f指定文件了

4.3 Docker 网络