Docker 基础学习
一、Docker简介与背景学习
1.1 简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
(1)DockerClient客户端
(2)Docker Daemon守护进程
(3)Docker Image镜像
(4)DockerContainer容器
1.2 Docker的应用场景
(1)Web 应用的自动化打包和发布。
(2)自动化测试和持续集成、发布。
(3)在服务型环境中部署和调整数据库或其他的后台应用。
(4)从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
1.3 优点
(1)快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
(2)响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
(3)在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
1.4 Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
二、Docker 安装与基本配置
2.1 安装环境
CentOS7.5或者以上版本:
链接:https://pan.baidu.com/s/19cF7noNwUKQoda8v1hoVtQ
提取码:eb8p
Docker安装版本:19.03.5
2.2 安装Docker(建议使用CentOS7.5以上版本安装)
# yum -y update
2.2.2 卸载旧版本的docker,防止重复安装
# yum -y remove docker docker-common docker-selinux docker-engine
2.2.3 设置Yum源:(本文以Yum安装为例子进行安装)
安装 yum-utils , 使用 yum-config-manager 工具设置Yum源, 后面两个是 devicemapper驱动依赖
# yum install -y yum-utils device-mapper-persistent-data lvm2
执行以下命令,添加docker的yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
这里可能会报错,原因是因为国内网络可能访问不到docker的官方镜像源的原因,遇到这个问题直接换用国内的镜像源就可以解决问题(如下):
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
成功如下图所示:
2.2.4 查看docker版本,选择合适版本安装
# yum list docker-ce --showduplicates | sort -r
2.2.5 配置镜像加速器(必须要配置,否则会出现访问镜像并不稳定 ,而且下载缓慢等问题)
(1)注册阿里云账号 ,登陆该网址自行注册
https://www.aliyun.com/?utm_content=se_1000301881
(2)登录并跳转到容器镜像服务:
执行命令:
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
> }
> EOF
配置成功入下图所示:
导入镜像源:
# systemctl daemon-reload
2.2.6 安装docker (此处我们安装社区版 docker-ce)
# yum install -y docker-ce(这样安装会默认安装最新版的docker)
也可以选择合适版本安装(如下):
# yum install -y docker-ce-18.03.1.ce
2.2.7 启动并加入开机启动
启动:
# systemctl start docker
开机启动:
# systemctl enable docker
查看安装版本:
# docker version
2.2.8 检验是否安装成功
# docker run hello-world
若安装成功如下图所示:
三、Docker 的基本使用
3.1 查询docker,如下:
# docker search tomcat8
3.2 下载docker源
# docker pull touchvie/tomcat8-jdk8
3.3 查询已下载的docker源
# docker images
3.4 运行镜像
# docker run -d -p 本机端口:容器端口 镜像名称
-d:镜像在后台运行
-p指定本机与容器内部交互的端口 -P是随机开放一个端口与容器内部ID映射(这里不做演示)
例如,下面运行tomcat环境,就是将镜像运行在后台,并且将本机的80端口跟容器的8080端口做映射:
# docker run -d -p 80:8080 touchvie/tomcat8-jdk8
3.5 查看正在运行的镜像
# docker ps
3.6 进入到容器内部
# docker exec -it 容器ID bash (下面是我的容器ID 每个容器ID是不一样的 使用docker ps 查看一下)
# docker exec -it d7762ecd7107 bash
退出:
# exit
3.7 文件传输
将容器的文件复制到本地:
# docker cp 8e0d5303979943965a74ed07cbb656e26572c0b21d95bb924d6066c8887d8aee:/usr/local/tomcat/logs/catalina.2020-01-06.log /usr/local/Docker/catalina.log
将本地文件上传到容器:
# docker cp /root/PGYLPIM.war 8e0d5303979943965a74ed07cbb656e26572c0b21d95bb924d6066c8887d8aee:/usr/local/tomcat/webapps/PGYLPIM.war
3.8 停止容器
docker stop 容器ID
# docker stop 8e0d53039799
3.9 查看所有状态的容器(包括已经被停止调的容器)
# docker ps -a
3.10 删除容器的步骤
3.10.1 查看所有状态的容器
3.10.2 删除容器的运行记录
3.10.3 删除容器
四、构建镜像并发布自己的项目(Dockerfile方式)
4.1 在/usr/local下创建Docker文件夹(随便的一个空的文件夹)
4.2 上传一个war包到/usr/local/Docker文件夹下
4.3 创建Dockerfile文件,并写入一下内容
# vim Dockerfile
4.4 构建镜像(还是在Docker文件夹 也就是Dockerfile所在文件夹)
docker build -t 镜像名称(镜像名称必须为小写):镜像版本 .
注意后面的点要加上,这个代表Dockerfile的所在目录
# docker build -t docker-test:latest .
4.5 运行镜像
五、构建镜像并发布自己的项目(commit方式)
5.1 运行一个容器
5.2 使用运行的容器创建一个镜像
5.3 运行这个镜像
5.4 将自己的项目war复制到新创建的容器webapps目录下:
5.5 访问服务器链接
六、修改时区
Tomcat的时区出现紊乱:
解决方法:
6.1 修改容器的运行时区
6.2 使用commit创建自己的容器
# docker commit e6f8a8a138bb tomcat8-timezone
6.3 运行新创建的镜像
七、创建容器的时候报错WARNING: IPv4 forwarding is disabled. Networking will not work
解决办法:
7.1 编辑/usr/lib/sysctl.d/00-system.conf,添加如下代码:
net.ipv4.ip_forward=1
7.2 重启网卡
# systemctl restart network
7.3 删除已创建错误的容器,并创建新的容器
八、在docker hub上注册账号,并发布自己创建的镜像源
8.1 先在docker hub官网注册自己的账号
8.2 使用docker login登录自己的账号
# docker login
8.3 使用docker push 发布自己的镜像
# docker push qhr520/tomcat8-timezone
8.4 查看自己上传的镜像
# docker search tomcat8-timezone