概述
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
docker优点
- 相比配置各种复杂环境,docker将应用程序和环境配置分开。因此可以快速部署,测试代码,大大减少编写代码和在生产环境中运行代码之间的延迟。
docker架构
docker包括三个基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
docker安装
首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:
1
2sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common使用下面的
curl
导入源仓库的 GPG key:1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
将 Docker APT 软件源添加到你的系统:
1
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
想要安装 Docker 最新版本,运行下面的命令。
1
2sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
docker配置国内镜像源
阿里云申请镜像地址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
touch /etc/docker/daemon.json
vim /etc/docker/daemon.json,添加以下内容
1
2
3{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}systemctl reload docker
systemctl restart dockerservice
docker基本操作
帮助命令
1
2
3
4
5
6
7
8#显示docker的版本信息
docker version
#显示docker的系统信息,包括镜像和容器数量
docker info
#显示命令帮助信息
docker 命令 --help镜像命令
1
2
3
4
5
6
7
8
9
10
11#查看所有本地的主机上的镜像
docker images
#在docker hub上搜索指定镜像,默认tag为latest
docker search <image>:<tag>
#下载指定镜像
docker pull <image>:<tag>
#删除指定镜像
docker rmi -f <image ID>容器命令
使用容器命令之前,必须要有相应的镜像
新建容器
1
2
3
4
5
6
7
8
9
10
11#新建容器并使用
docker run [可选参数] <image>
--name="Name" 容器名字,用于区分容器
-d 后台方式运行
-it 使用交互式方式运行,进入容器查看内容
-p 指定容器映射端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-P 随机指定端口
-e 修改配置文件查看容器
1
2
3
4
5#查看正在运行的容器
docker ps
#查看所有容器
docker ps -a退出容器
1
2
3
4
5#退出并停止交互容器
exit或Ctrl+P
#退出但不停止容器
Ctrl+P+Q删除容器
1
2
3
4
5#删除容器(不能删除正在运行的容器,若强制删除则需加上-f参数)
docker rm
#强制删除所有容器
docker rm -f $(docker ps -aq)启动和停止容器
1
2
3
4
5
6
7
8
9
10
11#启动容器
docker start id
#重启容器
docker restart id
#停止容器
docker stop id
#强制停止
docker kill id
其他命令
后台启动容器
1
docker run -d ubuntu
查看日志
1
docker logs -tf --tail <num> <id>
查看容器进程信息
1
docker top id
进入当前正在运行容器
1
2
3
4
5
6
7通常容器是在后台运行,但有时需要进入容器修改配置
#方式一,进入容器开启新的终端
docker exec -it id bash
#方式二,进入容器正在执行的终端
docker attach id bash查看CUP状态
1
docker stats id
举例
部署Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#搜索镜像
docker search nginx
#拉取镜像
docker pull nginx
#查看镜像
docker images
root@ubuntu:/home/xiaoh# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
#后台启动镜像
docker run -d --name nginx01 -p 1234:80 nginx
#测试是否启动
curl 127.0.0.1:1234
<h1>Welcome to nginx!</h1>
- 部署Tomcat#拉取镜像
docker pull tomcat#后台启动镜像
docker run -d -p 3456:8080 –name tomcat01 nginx#进入容器
docker exec -it tomcat01 /bin/bash#发现缺少linux命令、缺少webapps。原因是阿里云默认下载最小镜像,所有其他不必要的资源都会被剔除,只保证最小可运行的环境。
#复制webapps
cp -r webapps.dist/* webapps
```