欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux中CentOS上安装Docker容器学习笔记(2020.09.05)

程序员文章站 2024-03-25 13:43:22
...

Linux中CentOS上安装Docker Engine学习笔记(2020.09.05)

前言:

Docker概念

Docker是供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。使用容器来部署应用程序称为容器化。容器并不是新事物,但用于轻松部署应用程序的容器却是新事物。

容器化越来越受欢迎,因为容器是:

  • 灵活:即使最复杂的应用程序也可以容器化。
  • 轻量级:容器利用并共享了主机内核,在系统资源方面比虚拟机更有效。
  • 可移植:您可以在本地构建,部署到云并在任何地方运行。
  • 松散耦合:容器是高度自给自足并封装的,可让您在不破坏其他容器的情况下更换或升级它们。
  • 可扩展:您可以在数据中心内增加并自动分布容器副本。
  • 安全:容器将积极的约束和隔离应用于流程,而用户无需进行任何配置。

只是在官网简单抄了一句话过来, 总之就是使我们可以轻松部署应用, 解决开发环境运行没有问题,但是上到测试环境出现问题, 快速高效的开发生命周期等等, 有兴趣的可以去官网看看(点击打开)

镜像、容器和仓库

Docker 由镜像(Image)、容器(Container)、仓库(Repository) 三部分组成。

Docker 的镜像可以简单的类比为电脑装系统用的系统盘,包括操作系统,以及必要的软件。例如,一个镜像可以包含一个完整的 centos 操作系统环境,并安装了 Nginx 和 Tomcat 服务器。注意的是,镜像是只读的。这一点也很好理解,就像我们刻录的系统盘其实也是可读的。我们可以使用 docker images 来查看本地镜像列表。

Docker 的容器可以简单理解为提供了系统硬件环境,它是真正跑项目程序、消耗机器资源、提供服务的东西。例如,我们可以暂时把容器看作一个 Linux 的电脑,它可以直接运行。那么,容器是基于镜像启动的,并且每个容器都是相互隔离的。注意的是,容器在启动的时候基于镜像创建一层可写层作为最上层。我们可以使用 docker ps -a 查看本地运行过的容器。

Docker 的仓库用于存放镜像。这一点,和 Git 非常类似。我们可以从中心仓库下载镜像,也可以从自建仓库下载。同时,我们可以把制作好的镜像 commit 到本地,然后 push 到远程仓库。仓库分为公开仓库和私有仓库,最大的公开仓库是官方仓库 Dock Hub,国内的公开仓库也有很多选择,例如阿里云等。

1.0 安装Docker

更为之详细看 官方安装教程:

下面使用yum储存库安装方式

1.1.1 设置存储库

# 安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。
[aaa@qq.com /]# sudo yum install -y yum-utils
[aaa@qq.com /]# sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

1.1.2 安装最新Docker

[aaa@qq.com /]# sudo yum update 
[aaa@qq.com /]# sudo yum install docker-ce docker-ce-cli containerd.io

安装特定版本请在官网查看。

我在CentOS 8上面安装docker出现了错误: with Error – package containerd.io-1.2.10-3.2.el7.x86_64 is excluded 需要先执行下面安装containerd.io

sudo yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

安装完毕后输入docker -v 检查安装版本

1.1.3 启动Docker

[aaa@qq.com /]# sudo systemctl start docker
# 通过运行hello-world 映像来验证是否正确安装了Docker Engine 。
[aaa@qq.com /]# sudo docker run hello-world

2.0 Docker常用命令

# 启动docker
[aaa@qq.com /]# sudo systemctl start docker
# 停止docker
[aaa@qq.com /]# sudo systemctl stop docker
# 刷新配置
[aaa@qq.com /]# sudo systemctl daemon-reload
# 重启docker
[aaa@qq.com /]# sudo systemctl restart docker
# 查看docker状态:
[aaa@qq.com /]# sudo systemctl status docker
# 开机启动
[aaa@qq.com /]# sudo systemctl enable docker
#查看docker概要信息:docker info
#查看docker帮助文档:docker --help

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组

sudo usermod -aG docker your-user 请记住注销并重新登录才能生效!

3.0 Docker镜像操作

3.1.1 列出所有镜像

[aaa@qq.com /]# docker images

结果:

REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB

  • REPOSITORY:镜像所在的仓库名称

  • TAG:镜像标签

  • IMAGE ID:镜像ID

  • CREATED:镜像的创建日期(不是获取该镜像的日期)

  • SIZE:镜像大小

3.1.2 搜索镜像

# 需要联网 
[aaa@qq.com /]# docker search 镜像名称

搜索结果:

NAME:仓库名称 | DESCRIPTION:镜像描述 | STARS:用户评价,反应一个镜像的受欢迎程度

| OFFICIAL:是否官方 | AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3.1.3 下载镜像

# 需要联网
[aaa@qq.com /]# docker pull 镜像名称

3.1.4 配置国内的镜像源

[aaa@qq.com /]# mkdir -p /etc/docker/
echo '{"registry-mirrors":["https://s25hva86.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]}' > /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker

配置完国内镜像源, 需要重启docker容器 sudo systemctl restart docker

3.1.5 删除镜像

# 删除指定镜像 (只能删除未在运行中的容器) -f表示强制删除
[aaa@qq.com /]# docker rmi -f $IMAGE_ID(镜像ID)
# 删除所有镜像 (只能删除未在运行中的容器) -f表示强制删除
[aaa@qq.com /]# docker rmi -f docker images -q

4.0 Docker容器操作

4.1.1 查看容器信息

# 查看正在运行容器:
[aaa@qq.com /]# docker ps
#查看所有的容器(启动过的历史容器)
[aaa@qq.com /]# docker ps -a
# 查看最后一次运行的容器
[aaa@qq.com /]# docker ps -l
# 查看停止的容器
[aaa@qq.com /]# docker ps -f status=exited
# 查看容器信息
[aaa@qq.com /]# docker inspect 容器id[容器名称]
# 查看容器日志
[aaa@qq.com /]# docker logs -f 容器id[容器名称]

4.1.2 启动容器

[aaa@qq.com /]# docker run 参数

创建容器常用的参数说明:

  • -i:保持容器运行。通过和-t同时使用。加入-it这两个参数以后,容器创建后会自动进入容器中,退出容器后,容器会自动关闭。

  • -t:表示容器启动后会进入其命令行。通常和-i同时使用,容器创建就能登录进去。即分配一个伪终端。

  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。

  • --name :为创建的容器命名。

  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射, 例如: -p 33306:3306 33306是虚拟机端口, 3306是容器内部端口

  • -it:创建的容器一般称为交互式容器。(一般不使用)

  • -id:创建的容器一般称为守护式容器。(需要长期运行的容器使用)

4.1.2.1创建一个交互式容器

# /bin/bash 是centos的一个指令,代表启动命令行
[aaa@qq.com /]# docker run -it --name=mycentos centos:7 /bin/bash

创建完毕会自动进入容器。

Linux中CentOS上安装Docker容器学习笔记(2020.09.05)

退出容器命令exit

4.1.2.2 创建一个守护式容器

创建一个守护式容器:如果对于一个需要长期运行的容器来说,可以创建一个守护式容器。

命令如下(容器名称不能重复):

[aaa@qq.com /]# docker run -id --name=mycentos2 centos:7 /bin/bash

登录守护式容器方式:

docker exec -it container_name (或者 container_id) /bin/bash(exit退出时,容器不会停止)

4.1.2.3 启动一个docker存在的镜像

Linux中CentOS上安装Docker容器学习笔记(2020.09.05)

现在docker存在2个镜像, 我们需要启动configserver镜像! configserver:latest (镜像名称:标签)|| 或者IMAGE ID:镜像ID

docker run -it --name=MySpringBoot  -p8080:8080 configserver:latest
docker run -it --name=MySpringBoot  -p8080:8080 bd0c0386dd34

4.1.3 停止与启动容器

# 停止正在运行的容器:
[aaa@qq.com /]# docker stop $CONTAINER_NAME/ID(容器名称或ID)
# 启动已运行过的容器:
[aaa@qq.com /]# docker start $CONTAINER_NAME/ID(容器名称或ID)
# 重启容器
[aaa@qq.com /]# docker restart 容器id[容器名称]
# 强制停止容器
[aaa@qq.com /]# docker kill 容器id[容器名称]

4.1.4 删除容器

# 需要先停止容器,然后再删除
[aaa@qq.com /]# docker rm 容器id[容器名称]
# 强制删除容器
[aaa@qq.com /]# docker rm -f 容器id[容器名称]
# 强制删除所有容器
[aaa@qq.com /]# docker rm -f $(docker ps -qa)

4.1.5 文件拷贝

如果需要将文件拷贝到容器内可以使用cp命令 || 也可以将文件从容器内拷贝出来同样cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录 (拷贝进去容器)

docker cp 容器名称:容器目录 需要拷贝的文件或目录 (容器拷贝出去)

4.1.6 目录挂载

可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器 添加-v参数 宿主机目录:容器目录

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示 Permission denied

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos2 centos:7

上传镜像到Docker Hub

先去https://hub.docker.com/官网申请一个docker hub 帐号

$ docker login # 登录Docker Hub
$ docker images #查看本地镜像
$ docker tag <镜像名> <用户名/镜像名> #将镜像转让我的账号下
$ docker push <用户名>/<镜像名>

启动容器成功,但是出现异常不能访问

运行命令

查看容器日志

[aaa@qq.com /]# docker logs -f 容器id[容器名称]

1