docker使用
1. Docker 介绍
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1.1 Docker 架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
容器与镜像的关系类似于面向对象编程中的对象与类。
1.2 Docker 安装
Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。因此,Docker 必须部署在 Linux 内核的系统上。
- ubuntu 安装
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
- 卸载
# 删除安装包
sudo apt-get purge docker-ce
# 删除镜像、容器、配置文件等内容
sudo rm -rf /var/lib/docker
- windows安装
如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,并在安装 Linux 系统的的虚拟机中运行 Docker。
链接:https://www.runoob.com/docker/ubuntu-docker-install.html
1.3 Docker Hello world
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
- 输出Hello world
docker run ubuntu:15.10 /bin/echo "Hello world"
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
-
各个参数解析:
-
docker: Docker 的二进制执行文件。
-
run: 与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
-
/bin/echo “Hello world”: 在启动的容器里执行的命令
-
-
Docker 镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器;Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
-
科大镜像:https://docker.mirrors.ustc.edu.cn/
-
网易:https://hub-mirror.c.163.com/
-
阿里云:https://<你的ID>.mirror.aliyuncs.com
-
七牛云加速器:https://reg-mirror.qiniu.com
-
-
加速配置Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果不存在请新建该文件):
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
之后重新启动服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
2. Docker 常用命令
2.1 Docker 容器使用
- 查看到 Docker 客户端的所有命令选项
docker
- docker command --help 更深入的了解指定的 Docker 命令使用方法
docker stats --help
- 获取镜像
docker pull ubuntu
- 启动容器
docker run -it ubuntu /bin/bash
# 参数说明:
# -i: 交互式操作。
# -t: 终端。
# ubuntu: ubuntu 镜像。
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash/
# 要退出终端,直接输入 exit
- 退出容器
exit
- 查看所有的容器
docker ps -a
- 使用 docker start 启动一个已停止的容器
docker start b750bbbcfd88
-
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式
# 加了 -d 参数默认不会进入容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
- 停止容器
docker stop <容器 ID>
- 停止的容器可以通过 docker restart 重启
docker restart <容器 ID>
- 进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
# 使用 docker attach 命令进入容器,退出后会导致容器的停止
docker attach 1e560fca3906
# 使用 docker exec 命令进入容器,退出后容器会继续运行
docker exec -it 243c32535da7 /bin/bash
- 导出容器
docker export 1e560fca3906 > ubuntu.tar
- 导入容器
# 以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
# 通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo
- 删除容器
docker rm -f 1e560fca3906
-
内容传输
- 导出
# docker cp <容器ID或名称>:<容器内路径> <本地主机路径> docker cp 15bb76c6f6d6:/models/aircas/model/default/model_20230801-111150 /data/xzf/
- 导入
# docker cp <容器ID或名称>:<容器内路径> <本地主机路径> docker cp /home/user/data.txt mycontainer:/app
2.2 Docker 镜像使用
- 列出所有镜像
docker images
各个选项说明:
- **REPOSITORY:**表示镜像的仓库源
- **TAG:**镜像的标签
- **IMAGE ID:**镜像ID
- **CREATED:**镜像创建时间
- **SIZE:**镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
- 进入容器
docker run -it ubuntu:20.04 /bin/bash
# 参数说明:
# -i: 交互式操作。
# -t: 终端。
# ubuntu:20.04: 这是指用 ubuntu 20.04 版本镜像为基础来启动容器。
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
- 获取新的镜像
docker pull ubuntu:13.10
- 查找镜像
- 从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
- 使用 docker search 命令来搜索镜像
docker search httpd
- 删除镜像
# 镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像
docker rmi hello-world
2.3 Docker 容器连接
-
网络端口映射
使用 -P 绑定端口号,使用 docker ps 可以看到容器端口 5000 绑定主机端口 32768
# Docker 端口映射的语法是 -p [主机端口]:[容器端口]
# 以下命令将容器的端口 80 映射到主机的端口 8080
docker run -p 8080:80 [容器名称或 ID]
# 将容器暴露给主机的所有网络接口,而不仅仅是 localhost,使用 0.0.0.0 表示所有的 IP 地址
docker run -p 0.0.0.0:8080:80 [容器名称或 ID]
2.4 Docker Compose
-
Compose 使用的三个步骤:
-
定义应用程序的环境(使用ubuntu:20.04镜像)
-
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
-
执行 docker-compose up 命令来启动并运行整个应用程序
-
-
定义docker-compose.yml
version: '3'
services:
# 容器名称
test:
# 镜像名称
image: ubuntu:20.04
# 端口映射
ports:
- "12009:22"
- "15009:5005"
# 环境
environment:
LANG: zh_CH.UTF-8
# 路径映射,将本地test映射到容器的code路径下
volumes:
- ./test:/code
- /etc/localtime:/etc/localtime:ro
# 设置ssh的登录密码
command: bash -c "/usr/sbin/sshd -D && passwd && 123"
privileged: true
- 运行容器
# -d 后台运行容器
docker-compose up -d