Docker

核心概念

镜像 image

镜像就是一堆静态的模板,根据这个模板运行起来的就是容器。镜像一般需要拉取下来,是只读的。

Docker镜像中有分层的概念,就是一个镜像可能基于好几个镜像,比如一个Web运行环境可能需要操作系统、Mysql等,那么拉取的镜像就会包好这几个镜像。


容器 container

运行拉取的镜像,就会根据这个镜像生成一个容器。运行的容器就像应用程序,可以访问、可以停止。运用多次Run命令,就运行了很多容器,也可以说是镜像的实例。


数据卷 Volumn

容器就好像一个简易版的操作系统。数据卷用来做数据持久化到我们的宿主机上容器间的数据共享,简单说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化。


Docker安装

Docker之介绍与安装 - Qubernet - 博客园 (cnblogs.com)



Docker 命令

  1. 查看已有镜像

    docker iamges

  2. 镜像安装

    镜像的官方资源仓库:Docker Hub,需要的镜像及对应版本都有陈列,且官网有直接的下载命令可以复制。

    docker pull zookeeper:latest

  3. 查看所有容器

    docker ps [OPTIONS]

    OPTION:

    • -a: 显示所有容器,包括未运行的

    • --filter: 根据条件过滤

      docker ps --filter "name=lucid_beaver"

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

    • -n: 列出最近创建的n个容器

      docker ps -n 2 列出最近创建的2个容器

    • -s: 显示总的文件大小

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

  4. 运行容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS:

  • -d: 后台运行容器,并返回容器ID 守护进程,当这个进程意外死亡后,会自动拉起来
  • -p: 指定端口映射,宿主机端口:容器端口
  • -i: 以交互模式运行容器,通常与-t同时使用
  • -t: 为容器重新分配一个伪输入终端,通常与-i同时使用
  • --name=xxx: 为容器指定一个名称,xxx为字符串但不能加引号
  • -e: 设置环境变量

docker run -itd --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

  1. 进入容器内部

    docker exec -it [CONTAINER ID] bash

  2. 关闭容器

    docker stop [CONTAINER ID]

  3. 杀死进程

    docker kill [CONTAINER ID]

  4. 删除容器

    docker rm [CONTAINER ID]


运行各容器

ZooKeeper

1
docker run -d --name=zookeeper -p 2181:2181 zookeeper

MySQL

1
docker run -itd --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

本机可以通过 root 和密码 123456 访问 MySQL 服务:

1
mysql -h localhost -u root -p

Redis

1
2
3
4
5
# 不带密码运行容器
docker run -itd --name myRedis -p 6379:6379 redis

# 带密码运行容器
docker run -itd --name myRedis -p 6379:6379 redis --requirepass "123456"

RabbitMQ

1
docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3.12-management
  • 15672端口:RabbitMQ的管理页面端口
  • 5672端口:RabbitMQ的消息接收端口

问题

docker run hello-world失败

参考如下,docker的镜像源一定要添加能ping通的。

docker下载镜像超时问题:Get https://registry-1.docker.io/v2/_myydan的博客-CSDN博客