跳至主要內容

Docker 基础

逸尘.Lycodx大约 7 分钟后端dockerLinux

Docker 基础

一、Docker简介

  • docker官网: https://www.docker.com/open in new window

  • docker主要分为三大部分:镜像(image),容器(container),仓库(repository)

  • docker的发展史(感兴趣的同学可以自己了解一下,这里不多说了)

二、Docker安装与启动

Docker安装官方文档地址: https://docs.docker.com/engine/install/centos/open in new window

注意

这里说需要安装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/open in new window

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=imageopen in new window

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    # 后台启动容器
1642216423738

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 使用外网访问

运行原理图

上次编辑于: