Docker 基础
Docker 基础
一、Docker简介
docker官网: https://www.docker.com/
docker主要分为三大部分:镜像(image),容器(container),仓库(repository)
docker的发展史(感兴趣的同学可以自己了解一下,这里不多说了)
二、Docker安装与启动
Docker安装官方文档地址: https://docs.docker.com/engine/install/centos/

注意
这里说需要安装Docker CentOS版本必须是7或8之间
2.1 CentOS 7.x 安装
1)卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2)安装需要的包
yum install -y yum-utils
3)设置镜像仓库
# 国外地址 (默认)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云镜像(推荐使用)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装完成如图

4)更新yum软件包索引
yum makecache false
5)安装Docker
# docker-ce 社区版(推荐) docker-ee 企业版
yum install docker-ce docker-ce-cli containerd.io
6)启动Docker
systemctl start docker
7)查看Docker是否安装成功
docker version

8)验证Docker是否安装成功
运行hello-word镜像
docker run hello-word

分析
这里我们分析一波 hello-word 的执行流程

通过这个流程我们发现,docker run这个命令在运行时如果没有该镜像会主动去拉取,这就是等于同时执行了docker pull
2.2 Ubuntu 20.04 安装
1)更新系统
sudo apt update
2)安装必要的软件包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
3)添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4)设置 Docker 存储库
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5)安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
6)检查是否安装成功
systemctl status docker.service
三、Docker卸载(了解)
3.1 卸载 Docker
yum remove docker-ce docker-ce-cli containerd.io
3.2 删除主机上的镜像、容器、仓库等
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
四、Docker的常用命令
Docker命令文档地址: https://docs.docker.com/engine/reference/commandline/docker/
4.1 帮助命令
docker version # 查看docker版本信息
docker info # 查看docker的更详细信息
docker [命令] --help # 万能帮助命令 (当对一个命令不了解是多去使用--help)
4.2 镜像命令
1)查看本机上的所有镜像
# 查看所有镜像
docker images
# 查看所有镜像id
docker images -aq

# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
2)搜索镜像
官方镜像搜索文档地址: https://hub.docker.com/search?type=image
docker search 镜像名
# 可以添加条件筛选,感兴趣的同学可以百度一下
eg :搜索 mysql

3)下载镜像
# 默认拉取的是最新版本(latest)
docker pull 镜像名
# 指定版本拉取(镜像版本号需要去镜像市场搜索查看)
docker pull nginx:1.17
配置加速
国内使用 docker pull 一般都比较慢,我们可以配置一个阿里云的加速
1)我们先注册一个阿里云的账号,然后搜索容器镜像服务

2)找到镜像加速器 将一段代码写入文件中,如下图所示

3) 重载文件或重启docker
systemctl daemon-reload # 重载文件
systemctl restart docker # 重启docker
eg :下载一个 mysql
[root@VM_0_8_centos ~]# docker pull mysql
Using default tag: latest # 默认是最新的
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 # 签名(防伪)
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 以下两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
指定版本下载
查看镜像版本号需要到官方网站上
docker pull mysql:5.7 # 镜像的版本号一定要存在才行

PS
我们发现有些是 Already exists ;这个是已经存在,就是上面说的联合文件系统,可以复用的不会再次下载。
4)删除镜像
docker rmi -f 镜像id # 根据镜像id删除
docker rmi -f 镜像id1 镜像id2 镜像id3 # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部镜像 (前面说过docker images -aq是查询所有镜像id)
我们首先查看一下镜像

eg:通过镜像id删除
docker rmi -f feb5d9fea6a5


eg:全部删除(递归删除)
docker rmi -f $(docker images -aq) #docker images -aq 就会查出所有的id,然后递归删除


执行完递归删除后我们发现已经没有镜像了。
4.3 容器命令
说明
首先我们要知道,镜像启动后就是容器
我们有镜像才可以创建容器,那我们下载一个centos镜像
docker pull centos

1)启动并进入容器
docker run -it centos /bin/bash # -it是交互运行;/bin/bash是进入容器后的终端
docker run -d centos # 后台启动容器

2)退出容器
exit # 停止容器并退出
Ctrl + p + q # 不停止退出 (快捷键)
容器一旦停止里面的新建的文件都会消失
3)查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看历史运行的容器
# CONTAINER ID 就是容器id

4)删除容器
docker rm -f 容器id # 按照容器id删除,正在运行的不能删除
docker rm -f $(docker ps -aq) # 删除所有容器
5)删除历史容器
# 可以通过容器 id 和 名称
docker rm [容器id]
docker rm [容器名称]
6)启动和停止容器
docker start 容器id # 启动
docker stop 容器id # 停止
docker restart # 重启容器
docker kill 容器id # 强制停止容器

4.4 常用的其他命令
1)后台启动容器
# 后台启动centos容器
docker run -d centos

注意:这里我们使用run并后台运行了centos,然而再使用 docker ps 查看命令发现并没有容器在运行,这是为什么呢?
解释:docker容器使用后台运行,就必须要有一个前台进程与之配合。如果光启动后台,没有前台应用,docker发现没有应用,就会自动停止运行
2)查看日志
# docker logs
docker logs -tf --tail 10 容器id # 查看指定容器中的10条日志
docker logs -tf 容器id # 查看指定容器中所有日志

3)查看进程
# 查看容器中的进程信息
docker top 容器id
# 查看CPU状态
docker stats

4)查看容器/镜像中的元数据
docker inspect 容器id/镜像id

5)进入当前正在运行的容器
① 方式一
docker exec -it 容器id /bin/bash # -it是交互模式;/bin/bash是终端

② 方式二
docker attach 容器id

方式一和方式二的区别
方式一是打开一个新的终端,方式二是进入正在执行的终端,不会启动新的进程
6)从容器内拷贝文件到主机
docker cp 容器id:文件路径 主机路径

我们在容器中的home文件夹新建了一个test.go文件,然后将test.go文件拷贝到主机中的home文件夹中了
小结

五、实战(Docker 安装部署nginx)
5.1 安装nginx
docker pull nginx

5.2 运行nginx镜像
# -d 后台运行; --name 取名; -p:3555:80 将宿主机的3555端口映射到容器中的80端口 (-P 可以随机映射,不用指定端口)
docker run -d --name nginx01 -p:3555:80 nginx
# 注意宿主机的端口需要在某云去开通安全组

5.3 在服务器内运行
curl localhsot:3555

我们可以看到已经打印出 welcome to nginx说明启动成功了
5.4 使用外网访问

运行原理图
