tip:
本文将介绍如何在 Debian 11 和 CentOS7 下安装 Docker 以及 Docker Compose。
本文同时适用于 Debian 11、 Debian 10 Buster、Ubuntu 20.04 Focal 以及 Ubuntu 18.04 Bionic*
以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作。
如果想要查询 Docker 镜像的详细版本请前往 Docker hub 官网:
https://hub.docker.com/search?q=
部分资料来源 烧饼博客 感谢 @Showfom 大佬
什么是 Docker?
Docker 是一种容器化技术,可以在服务器上快速搭建容器并在不污染宿主机的情况下运行软件,而不再需要安装配置各种环境。开源 Docker 社区 致力于改进这类技术,并免费提供给所有用户,使之获益。
什么是 Docker Compose?
传统模式下运维人员需要运行 docker run
来启动各种容器,一旦容器过多,就无法一次性记住所有的运行参数和命令,这时候我们可以使用 Docker Compose 来解决这个问题。
Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。使用 Compose 的巨大优点是,你可以在文件中定义应用程序堆栈,使其位于项目存储库的根目录下(它现在受版本控制),并方便其他人参与你的项目。 其他人只需克隆你的存储库即可开始撰写应用。 事实上,你可能会看到 GitHub/GitLab 上的很多项目现在都是这样做的。(via 使用 Docker Compose )
CentOS7 安装 Docker
清理 CentOS7 自带 Docker 版本 1 2 3 4 5 6 7 8 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
CentOS7 安装 Docker 所需依赖 1 yum install -y yum-utils device-mapper-persistent-data lvm2
CentOS7 安装 Docker-ce 源 1 2 yum-config-manager \ --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
CentOS7 更新缓存 Yum 缓存
CetnOS7 下载 Docker 1 yum -y install docker-ce
Debian 11 安装 Debian 11 安装 Docker 所需要的依赖 1 2 3 apt update apt upgrade -y apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates
然后加入 Docker 的 GPG 公钥和 apt 源: 1 2 curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
1 2 curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
然后更新系统后即可安装 Docker CE: 1 2 apt update apt-get install docker-ce docker-ce-cli containerd.io
安装 Docker Compose 我们可以使用 Docker 官方发布的 Github 直接安装最新版本:
1 2 curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
此时可以使用 docker-compose version
命令检查是否安装成功:
1 2 root@debian ~ Docker Compose version v2.6.1
查看 Docker 版本并启动 Docker 服务 此时可以使用 docker version
命令检查是否安装成功:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@server nginx]# docker version Client: Docker Engine - Community Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:05:12 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:03:33 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.6 GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 runc: Version: 1.1.2 GitCommit: v1.1.2-0-ga916309 docker-init: Version: 0.19.0 GitCommit: de40ad0
出现上述打印时,代表 Docker 已经安装成功。
现在你可以使用 systemctl start docker
启动 Docker 服务,使用 systemctl status docke
r查看 Docker 状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@server nginx] ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2022-06-20 14:20:41 CST; 2 months 23 days ago Docs: https://docs.docker.com Main PID: 2823 (dockerd) Tasks: 9 Memory: 129.1M CGroup: /system.slice/docker.service └─2823 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jul 04 16:47:02 server dockerd[2823]: time="2022-07-04T16:47:02.754108737+08:00" level=info msg="ignoring event" container=9e2...Delete" Jul 04 16:47:15 server dockerd[2823]: time=" 2022-07-04T16:47:15.664988858+08:00" level=warning msg=" Published ports are discar...k mode" Jul 04 16:47:15 server dockerd[2823]: time=" 2022-07-04T16:47:15.730605349+08:00" level=warning msg=" Published ports are discar...k mode" Jul 04 16:47:59 server dockerd[2823]: time=" 2022-07-04T16:47:59.644912415+08:00" level=info msg=" ignoring event" container=dd4...Delete" Jul 05 11:29:47 server dockerd[2823]: time="2022-07-05T11:29:47.355243389+08:00" level=info msg="ignoring event" container=1b3...Delete" Jul 05 14:57:13 server dockerd[2823]: time=" 2022-07-05T14:57:13.380661904+08:00" level=info msg=" ignoring event" container=246...Delete" Jul 05 15:22:38 server dockerd[2823]: time="2022-07-05T15:22:38.315766291+08:00" level=info msg="ignoring event" container=246...Delete" Jul 05 15:27:11 server dockerd[2823]: time=" 2022-07-05T15:27:11.962833484+08:00" level=info msg=" ignoring event" container=530...Delete" Jul 31 00:09:12 server dockerd[2823]: time="2022-07-31T00:09:12.408910765+08:00" level=info msg="ignoring event" container=530...Delete" Jul 31 00:09:20 server dockerd[2823]: time=" 2022-07-31T00:09:20.743421203+08:00" level=info msg=" ignoring event" container=422...Delete" Hint: Some lines were ellipsized, use -l to show in full.
查看 Docker 镜像 1 2 3 docker images docker images -qa docker images --digests
设置 Docker 镜像源加速 (中科大镜像源) 1 2 3 4 5 6 7 8 9 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.nju.edu.cn/" ] } EOF
重启 Docker 使其配置生效 1 2 sudo systemctl daemon-reload sudo systemctl restart docker
查看 Docker 的 GitHub 列表目录 1 2 3 4 5 6 7 8 9 10 11 docker search [想查看的Docker应用] 例: [root@server ~]# docker search python NAME DESCRIPTION STARS OFFICIAL AUTOMATED python Python is an interpreted, interactive, objec… 7701 [OK] pypy PyPy is a fast, compliant alternative implem… 330 [OK] circleci/python Python is an interpreted, interactive, objec… 51 hylang Hy is a Lisp dialect that translates express… 45 [OK] bitnami/python Bitnami Python Docker Image 22 [OK] cimg/python 5
Docker 常用命令 查看 Docker 镜像源 1 2 3 docker images docker images -qa docker images --digests
拉取 Docker 镜像
运行 Docker 镜像
1 2 3 4 5 6 7 8 docker run -it [CONTAINER ID] docker run -itd [CONTAINER ID] docker run -itd --name [别名] [CONTAINER ID]
如果进去了镜像,想要退出:
控制输入:
如果只想退出,容器继续运行
MongoDB的docker-compose.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 version: "3" services: mongodb: image: mongo:latest container_name: mongodb restart: always volumes: - ./data:/data/db ports: - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: 123456
在Docker容器中运行MongoDB数据库时,通常不需要指定command: [–auth]参数。这是因为,在MongoDB 3.0以后的版本中,认证功能是默认启用的。也就是说,只要在MongoDB数据库中创建了用户,就必须使用用户名和密码来进行连接。
如果在Docker容器中运行的是MongoDB 3.0之前的版本,则可能需要指定command: [–auth]参数,才能启用认证功能。例如,可以使用如下的内容作为docker-compose.yml文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 version: "3" services: mongodb: image: mongo:3.6 container_name: mongodb restart: always volumes: - ./data:/data/db ports: - "27017:27017" command: [--auth ] environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: 12345
MySQL的docker-compose.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 version: "3" services: mysql: image: mysql:latest container_name: mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: my_db ports: - "3306:3306" volumes: - "./mysql:/var/lib/mysql" - "./mysql-data:/var/lib/mysql-data"
Redis的docker-compose.yml 1 2 3 4 5 6 7 8 9 10 11 version: "3" services: redis: image: redis:6 container_name: redis environment: REDIS_PASSWORD: password ports: - "6379:6379" volumes: - "./redis:/data"
1 2 3 4 5 6 7 version: '3' services: redis: image: redis ports: - 6379 :6379 command: redis-server --bind 0.0 .0 .0 -a <password>
Docker Hub 要推送Docker镜像到Docker Hub,需要按照以下步骤进行操作:
登录Docker Hub,使用您的用户名和密码进行登录。
在Docker Hub上创建一个新的仓库,用于存储您的镜像。
在终端中运行以下命令,将镜像标记为您的Docker Hub用户名和仓库名:
1 2 $ docker tag <image> <your_username>/<repository_name>:<tag>
例如:
1 2 $ docker tag my_image username/my_repo:latest
运行以下命令,推送标记的镜像到Docker Hub:
1 2 $ docker push <your_username>/<repository_name>:<tag>
例如:
1 2 $ docker push username/my_repo:latest
在这些命令完成后,您的镜像就会被推送到Docker Hub,并可以供其他用户使用。