Linux中CentOS
上安装Docker Engine
学习笔记(2020.09.05)Docker是供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。使用容器来部署应用程序称为容器化。容器并不是新事物,但用于轻松部署应用程序的容器却是新事物。
容器化越来越受欢迎,因为容器是:
只是在官网简单抄了一句话过来, 总之就是使我们可以轻松部署应用, 解决开发环境运行没有问题,但是上到测试环境出现问题, 快速高效的开发生命周期等等, 有兴趣的可以去官网看看(点击打开)
Docker 由镜像(Image)、容器(Container)、仓库(Repository) 三部分组成。
Docker 的镜像可以简单的类比为电脑装系统用的系统盘,包括操作系统,以及必要的软件。例如,一个镜像可以包含一个完整的 centos 操作系统环境,并安装了 Nginx 和 Tomcat 服务器。注意的是,镜像是只读的。这一点也很好理解,就像我们刻录的系统盘其实也是可读的。我们可以使用 docker images
来查看本地镜像列表。
Docker 的容器可以简单理解为提供了系统硬件环境,它是真正跑项目程序、消耗机器资源、提供服务的东西。例如,我们可以暂时把容器看作一个 Linux 的电脑,它可以直接运行。那么,容器是基于镜像启动的,并且每个容器都是相互隔离的。注意的是,容器在启动的时候基于镜像创建一层可写层作为最上层。我们可以使用 docker ps -a
查看本地运行过的容器。
Docker 的仓库用于存放镜像。这一点,和 Git 非常类似。我们可以从中心仓库下载镜像,也可以从自建仓库下载。同时,我们可以把制作好的镜像 commit 到本地,然后 push 到远程仓库。仓库分为公开仓库和私有仓库,最大的公开仓库是官方仓库 Dock Hub,国内的公开仓库也有很多选择,例如阿里云等。
更为之详细看 官方安装教程:
下面使用
yum
储存库安装方式
# 安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。
[root@zhihao /]# sudo yum install -y yum-utils
[root@zhihao /]# sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
[root@zhihao /]# sudo yum update
[root@zhihao /]# 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
检查安装版本
[root@zhihao /]# sudo systemctl start docker
# 通过运行hello-world 映像来验证是否正确安装了Docker Engine 。
[root@zhihao /]# sudo docker run hello-world
# 启动docker
[root@zhihao /]# sudo systemctl start docker
# 停止docker
[root@zhihao /]# sudo systemctl stop docker
# 刷新配置
[root@zhihao /]# sudo systemctl daemon-reload
# 重启docker
[root@zhihao /]# sudo systemctl restart docker
# 查看docker状态:
[root@zhihao /]# sudo systemctl status docker
# 开机启动
[root@zhihao /]# sudo systemctl enable docker
#查看docker概要信息:docker info
#查看docker帮助文档:docker --help
Docker 需要用户具有 sudo 权限,为了避免每次命令都输入
sudo
,可以把用户加入 Docker 用户组
sudo usermod -aG docker your-user
请记住注销并重新登录才能生效!
[root@zhihao /]# docker images
结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
REPOSITORY:镜像所在的仓库名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
# 需要联网
[root@zhihao /]# docker search 镜像名称
搜索结果:
NAME:仓库名称 | DESCRIPTION:镜像描述 | STARS:用户评价,反应一个镜像的受欢迎程度
| OFFICIAL:是否官方 | AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
# 需要联网
[root@zhihao /]# docker pull 镜像名称
[root@zhihao /]# 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
# 删除指定镜像 (只能删除未在运行中的容器) -f表示强制删除
[root@zhihao /]# docker rmi -f $IMAGE_ID(镜像ID)
# 删除所有镜像 (只能删除未在运行中的容器) -f表示强制删除
[root@zhihao /]# docker rmi -f docker images -q
# 查看正在运行容器:
[root@zhihao /]# docker ps
#查看所有的容器(启动过的历史容器)
[root@zhihao /]# docker ps -a
# 查看最后一次运行的容器
[root@zhihao /]# docker ps -l
# 查看停止的容器
[root@zhihao /]# docker ps -f status=exited
# 查看容器信息
[root@zhihao /]# docker inspect 容器id[容器名称]
# 查看容器日志
[root@zhihao /]# docker logs -f 容器id[容器名称]
[root@zhihao /]# docker run 参数
创建容器常用的参数说明:
-i
:保持容器运行。通过和-t同时使用。加入-it这两个参数以后,容器创建后会自动进入容器中,退出容器后,容器会自动关闭。
-t
:表示容器启动后会进入其命令行。通常和-i同时使用,容器创建就能登录进去。即分配一个伪终端。
-d
:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
--name
:为创建的容器命名。
-v
:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p
:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射, 例如:-p 33306:3306
33306是虚拟机端口, 3306是容器内部端口
-it
:创建的容器一般称为交互式容器。(一般不使用)
-id
:创建的容器一般称为守护式容器。(需要长期运行的容器使用)
# /bin/bash 是centos的一个指令,代表启动命令行
[root@zhihao /]# docker run -it --name=mycentos centos:7 /bin/bash
创建完毕会自动进入容器。
退出容器命令
exit
创建一个守护式容器:如果对于一个需要长期运行的容器来说,可以创建一个守护式容器。
命令如下(容器名称不能重复):
[root@zhihao /]# docker run -id --name=mycentos2 centos:7 /bin/bash
登录守护式容器方式:
docker exec -it container_name (或者 container_id) /bin/bash
(exit退出时,容器不会停止)
现在
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
# 停止正在运行的容器:
[root@zhihao /]# docker stop $CONTAINER_NAME/ID(容器名称或ID)
# 启动已运行过的容器:
[root@zhihao /]# docker start $CONTAINER_NAME/ID(容器名称或ID)
# 重启容器
[root@zhihao /]# docker restart 容器id[容器名称]
# 强制停止容器
[root@zhihao /]# docker kill 容器id[容器名称]
# 需要先停止容器,然后再删除
[root@zhihao /]# docker rm 容器id[容器名称]
# 强制删除容器
[root@zhihao /]# docker rm -f 容器id[容器名称]
# 强制删除所有容器
[root@zhihao /]# docker rm -f $(docker ps -qa)
如果需要将文件拷贝到容器内可以使用
cp
命令 || 也可以将文件从容器内拷贝出来同样cp
命令
docker cp
需要拷贝的文件或目录 容器名称:容器目录 (拷贝进去容器)
docker cp
容器名称:容器目录 需要拷贝的文件或目录 (容器拷贝出去)
可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加
-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
先去https://hub.docker.com/官网申请一个docker hub 帐号
$ docker login # 登录Docker Hub
$ docker images #查看本地镜像
$ docker tag <镜像名> <用户名/镜像名> #将镜像转让我的账号下
$ docker push <用户名>/<镜像名>
运行命令
查看容器日志
[root@zhihao /]# docker logs -f 容器id[容器名称]
1