Linux中CentOS上安装Docker容器学习笔记(2020.09.05)
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
创建完毕会自动进入容器。
退出容器命令
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存在的镜像
现在
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
上一篇: Docker子命令汇总与解析