专业做家具的网站有哪些,wordpress in depth,重庆免费自助建站模板,wordpress 添加自定义栏目面板Docker技术入门教程
一、docker概念
一款产品从开发到上线#xff0c;从操作系统#xff0c;到运行环境#xff0c;再到应用配置。作为开发运维之间的协作我们需要关心很多东西#xff0c;这也是很多互联网公司都不得不面对的问题#xff0c;特别是各种版本的迭代之后从操作系统到运行环境再到应用配置。作为开发运维之间的协作我们需要关心很多东西这也是很多互联网公司都不得不面对的问题特别是各种版本的迭代之后不同版本环境的兼容对运维人员都是考验。 Docker之所以发展如此迅速也是因为它对此给出了一个标准化的解决方案。 环境配置如此麻烦换一台机器就要重来一次费力费时。很多人想到能不能从根本上解决问题软件可以带环境安装也就是说安装的时候把原始环境一模一样地复制过来。docker将每一个应用的配置文件进行封装生成一个镜像将镜像部署到容器中如此以来便解决了环境问题引起的应用程序的各种问题。
Docker 概念 • Docker 是一个开源的应用容器引擎 • 诞生于 2013 年初基于 Go 语言实现 dotCloud 公司出品后改名为Docker Inc • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的 Linux 机器上。 • 容器是完全使用沙箱机制相互隔离 • 容器性能开销极低。 • Docker 从 17.03 版本之后分为 CECommunity Edition: 社区版 和 EEEnterprise Edition: 企业版。 二、安装Docker与使用
安装Docker
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包 yum-util 提供yum-config-manager功能另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本验证是否验证成功
docker -v
Docker的架构
Docker 架构 配置 Docker 镜像加速器 默认情况下将来从docker hubhttps://hub.docker.com/上下载 docker镜像太慢。一般都会配置镜像加速器 • USTC中科大镜像加速器https://docker.mirrors.ustc.edu.cn • 阿里云 • 网易云 • 腾讯云
这里是使用阿里云镜像加速器的示例
注册账号或者使用支付宝 or淘宝账号登录阿里云官网https://cn.aliyun.com/登录后点击控制台在产品与服务搜索栏输入“容器镜像服务”点击进入
具体的配置文件设置安装提示操作即可。 配置好使用cat /etc/docker/daemon.json查看配置信息如下 Docker常用命令
启动docker服务 systemctl start docker 停止docker服务 systemctl stop docker 重启docker服务 systemctl restart docker 查看docker服务状态 systemctl status docker 开机启动docker服务 systemctl enable docker
Docker 镜像相关命令 查看镜像: 查看本地所有的镜像 docker images
docker images –q # 查看所用镜像的id搜索镜像:从网络中查找需要的镜像 docker search 镜像名称docker search redis:5.0拉取镜像:从Docker仓库下载镜像到本地镜像名称格式为 名称:版本号如果版本号不指定则是最新的版本。 如果不知道镜像版本可以去docker hub 搜索对应镜像查看. docker pull 镜像名称docker pull redis:5.0删除镜像: 删除本地镜像 docker rmi 镜像id # 删除指定本地镜像
docker rmi docker images -q # 删除所有本地镜像Docker 容器相关命令 查看容器 docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器创建并启动容器 docker run 参数例子后台启动容器centos7,镜像是centos:版本7
docker run -id --namecentos7 centos:7例子启动一个交互式容器
docker run -it --namecentos7 centos:7参数说明 • -i保持容器运行。通常与 -t 同时使用。加入it这两个参数后容器创建后自动进入容器中退出容器后容器自动关闭。 • -t为容器重新分配一个伪输入终端通常与 -i 同时使用。 • -d以守护后台模式运行容器。创建一个容器在后台运行需要使用docker exec 进入容器。退出后容器不会关闭。 • -it 创建的容器一般称为交互式容器-id 创建的容器一般称为守护式容器 • --name为创建的容器命名 进入容器 docker exec 参数 # 退出容器容器不会关闭docker exec -it c1 /bin/bash停止容器 docker stop 容器名称启动容器 docker start 容器名称删除容器如果容器是运行状态则删除失败需要停止容器才能删除 docker rm 容器名称查看容器信息 docker inspect 容器名称三、Docker 容器的数据卷
数据卷概念
数据卷概念 思考 • Docker 容器删除后在容器中产生的数据还在吗 • Docker 容器和外部机器可以直接交换文件吗 思考 • Docker 容器删除后在容器中产生的数据也会随之销毁 • Docker 容器和外部机器可以直接交换文件吗 • 容器之间想要进行数据交互 数据卷 • 数据卷是宿主机中的一个目录或文件 • 当容器目录和数据卷目录绑定后对方的修改会立即同步 • 一个数据卷可以被多个容器同时挂载 • 一个容器也可以被挂载多个数据卷
数据卷作用 • 容器数据持久化 • 外部机器和容器间接通信 • 容器之间数据交换
配置数据卷
创建启动容器时使用 –v 参数 设置数据卷
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...例子 # 将宿主机根路径下的data目录挂载给容器c1的/root/data_container对应的镜像为centos:版本7
docker run -it --namec1 -v ~/data:/root/data_container centos:7注意事项
目录必须是绝对路径如果目录不存在会自动创建可以挂载多个数据卷 # 宿主机~/data1和~/data2两个目录挂载到容器c2上对应的/root/data1和/root/data2目录
docker run -it --namec2 -v ~/data1:/root/data1 -v ~/data2:/root/data2 centos:7#再创建一个容器取名为c3将存在的数据卷~/data/也挂载给该容器的/root/data_container目录这样就两个容器共用一个数据卷了
docker run -it --namec3 -v ~/data:/root/data_container centos:7数据卷容器
多容器进行数据交换
多个容器挂载同一个数据卷数据卷容器 配置数据卷容器
创建启动c3数据卷容器使用 –v 参数 设置数据卷
docker run –it --namec3 –v /volume centos:7 /bin/bash创建启动 c1 c2 容器使用 –-volumes-from 参数 设置数据卷
docker run –it --namec1 --volumes-from c3 centos:7 /bin/bashdocker run –it --namec2 --volumes-from c3 centos:7 /bin/bash数据卷小结
数据卷概念 • 宿主机的一个目录或文件数据卷作用 • 容器数据持久化 • 客户端和容器数据交换 • 容器间数据交换数据卷容器 • 创建一个容器挂载一个目录让其他容器继承自该容器( --volume-from )。 • 通过简单方式实现数据卷配置
四、Docker 应用部署小案例
MySQL部署 MySQL部署 • 容器内的网络服务和外部机器不能直接通信 • 外部机器和宿主机可以直接通信 • 宿主机和容器可以直接通信 • 当容器中的网络服务需要被外部机器访问时可以将容器中提供服务的端口映射到宿主机的端口上。外部机 器访问宿主机的该端口从而间接访问容器的服务。 • 这种操作称为端口映射 搜索mysql镜像
docker search mysql拉取mysql镜像
docker pull mysql:5.6创建容器设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysqldocker run -id \
-p 3307:3306 \
--namec_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD123456 \
mysql:5.6参数说明 -p 3307:3306将容器的 3306 端口映射到宿主机的 3307 端口。-v $PWD/conf:/etc/mysql/conf.d将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录-v $PWD/logs:/logs将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录-v $PWD/data:/var/lib/mysql 将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录**-e MYSQL_ROOT_PASSWORD123456**初始化 root 用户的密码。
进入容器操作mysql
docker exec –it c_mysql /bin/bash使用外部机器连接容器中的mysql 部署Tomcat
搜索tomcat镜像
docker search tomcat拉取tomcat镜像
docker pull tomcat创建容器设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcatdocker run -id --namec_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat 参数说明 **-p 8080:8080**将容器的8080端口映射到主机的8080端口 **-v $PWD:/usr/local/tomcat/webapps**将主机中当前目录挂载到容器的webapps
使用外部机器访问tomcat 部署Nginx
搜索nginx镜像
docker search nginx拉取nginx镜像
docker pull nginx创建容器设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.confuser nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
docker run -id --namec_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx参数说明 -p 80:80将容器的 80端口映射到宿主机的 80 端口。-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录-v $PWD/logs:/var/log/nginx将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
使用外部机器访问nginx 部署Redis
搜索redis镜像
docker search redis拉取redis镜像
docker pull redis:5.0创建容器设置端口映射
docker run -id --namec_redis -p 6379:6379 redis:5.0使用外部机器连接redis
./redis-cli.exe -h 192.168.191.114 -p 6379window端连接redis 五、Docker 镜像原理
操作系统组成部分 • 进程调度子系统 • 进程通信子系统 • 内存管理子系统 • 设备管理子系统 • 文件管理子系统 • 网络通信子系统 • 作业控制子系统 Linux文件系统由bootfs和rootfs两部分组成 • bootfs包含bootloader引导加载程序和 kernel内核 • rootfs root文件系统包含的就是典型 Linux 系统中的/dev/proc/bin/etc等标准目录和文件 • 不同的linux发行版bootfs基本一样而rootfs不同如ubuntucentos等
Docker 镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是 bootfs并使用宿主机的bootfs 第二层是 root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统一文件系统Union File System技术能够将不同的层整合成一个文件系统为这些层提供了一个统一的视角这样就隐藏了多层的存在在用户的角度看来只存在一个文件系统。 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像最底部的镜像成为基础镜像。 Docker 镜像原理
思考
Docker 镜像本质是什么
是一个分层文件系统
Docker 中一个centos镜像为什么只有200MB而一个centos操作系统的iso文件要几个个G
Centos的iso镜像文件包含bootfs和rootfs而docker的centos镜像复用操作系统的bootfs只有rootfs和其他镜像层。
Docker 中一个tomcat镜像为什么有500MB而一个tomcat安装包只有70多MB
由于docker中镜像是分层的tomcat虽然只有70多MB但他需要依赖于父镜像和基础镜像所有整个对外暴露的tomcat镜像大小500多MB 六、Dockerfile
镜像制作
Docker 镜像如何制作
1.容器转为镜像 docker commit 容器id 镜像名称***版本号 docker commit 6bb5050ee286 my_tomcat:1.0需要注意的是容器挂载的目录下的文件是不会被提交到容器生成的新镜像中的例如我们tomcat中的数据卷/root/tomcat/test/index.html是不会被提交到生产的容器镜像中的。 docker save -o 压缩文件名称 镜像名称***版本号 docker save -o my_tomcat.tar my_tomcat:1.0docker load –i 压缩文件名称 #为了方便测试我们可以先把镜像中的my_tomcat删掉然后再把压缩好的镜像加载进行测试
# 查看所有镜像并删除my_tomcat镜像
docker images
docker rmi my_tomcat镜像的id#加载镜像
docker load -i my_tomcat.tar2. dockerfile
Dockerfile 概念 • Dockerfile 是一个文本文件 • 包含了一条条的指令 • 每一条指令构建一层基于基础镜像最终构建出一个新的镜像 • 对于开发人员可以为开发团队提供一个完全一致的开发环境 • 对于测试人员可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了 • 对于运维人员在部署时可以实现应用的无缝移植
Dochub网址https://hub.docker.com 案例创建centos具体vim功能的dockerfile生成镜像 案例实现步骤 ① 定义父镜像FROM centos:7 ② 定义作者信息MAINTAINER xxx xxxxxx.cn ③ 执行安装vim命令 RUN yum install -y vim ④ 定义默认的工作目录WORKDIR /usr ⑤ 定义容器启动执行的命令CMD /bin/bash ⑥ 通过dockerfile构建镜像docker bulid –f dockerfile文件路径 –t 镜像名称:版本
创建一个dockerfile文件vim centos7_dockerfile
FROM centos:7
MAINTAINER zhangsan zhangsancib.com
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash构建centos7镜像命令 docker bulid -f /root/test_dockerfile/centos7_dockerfile -t zhangsan_centos7:1.0 .查看镜像 - 进入镜像查看是否具有vim功能 docker run -it --namezhangsan_centos7 zhangsan_centos7:1.0Dockerfile关键字
关键字作用备注FROM指定父镜像指定dockerfile基于那个image构建MAINTAINER作者信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用COPY复制文件build的时候复制文件到image中ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV namevalueARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udpWORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
案例制作一个简单SpringBoot项目的demo镜像 案例需求 定义dockerfile发布springboot项目 案例实现步骤 ① 定义父镜像FROM java:8 ② 定义作者信息MAINTAINER demo demodemo.cn ③ 将jar包添加到容器 ADD springboot.jar app.jar ④ 定义容器启动执行的命令CMD java–jar app.jar ⑤ 通过dockerfile构建镜像docker bulid –f dockerfile文件路径 –t 镜像名称:版本
快速创建一个SpringBoot的demo
快速创建项目
目的 能基于SpringBoot快速开发一个Spring应用
需求 搭建SpringBoot工程定义HelloController.hello()方法返回”Hello SpringBoot!”。
步骤
创建Maven项目导入SpringBoot起步依赖编写引导类定义HelloController类编写请求方法启动测试
实现
1、创建空Maven项目
2、导入SpringBoot起步依赖
!--springboot工程需要继承的父工程--
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.2.RELEASE/version
/parentdependencies!--web开发的起步依赖场景启动器依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency
/dependencies3、编写引导类
package com.xxx;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;/*** SpringBootApplication: 定义引导类* 当引导类中的main方法运行时,Spring或SpringMVC的环境就搭建好了*/
SpringBootApplication
public class SpringBootHelloApplication {public static void main(String[] args) {// 启动引导类,搭建相关环境SpringApplication.run(SpringBootHelloApplication.class, args);}
}
4、定义HelloController
package com.xxx.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class HelloController {RequestMapping(/hello)public String hello(){return Hello SpringBoot from docker!!;}
}
5、启动测试访问浏览器: http://localhost:8080/hello
创建dockerfile镜像文件
vim Springboot_dockerfile FROM java:8
MAINTAINER demo demodemo.com
ADD springboot_test.jar app.jar
CMD java -jardocker build -f ./springboot_dockerfile -t app:1.0 .七、Docker 服务编排
微服务架构的应用系统中一般包含若干个微服务每个微服务一般都会部署多个实例如果每个微服务都要手动启停维护的工作量会很大。
要从Dockerfile build image 或者去dockerhub拉取image要创建多个container要管理这些container启动停止删除
服务编排 按照一定的业务规则批量管理容器
Docker Compose服务编排工具
Docker Compose是一个编排多容器分布式部署的工具提供命令集管理容器化应用的完整开发周期包括服务构建启动和停止。使用步骤
利用 Dockerfile 定义运行环境镜像使用 docker-compose.yml 定义组成应用的各服务运行 docker-compose up 启动应用
Docker Compose 安装使用
Docker Compose
一、安装Docker Compose
# Compose目前已经完全支持Linux、Mac OS和Windows在我们安装Compose之前需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version二、卸载Docker Compose
# 二进制包方式安装的删除二进制文件即可
rm /usr/local/bin/docker-compose三、 使用docker compose编排nginxspringboot项目
创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose编写 docker-compose.yml 文件
version: 3
services:nginx:image: nginxports:- 80:80links:- appvolumes:- ./nginx/conf.d:/etc/nginx/conf.dapp:image: appexpose:- 8080创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d在./nginx/conf.d目录下 编写itheima.conf文件
server {listen 80;access_log off;location / {proxy_pass http://app:8080;}}在~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up测试访问
http://192.168.119.114/helloDocker 私有仓库
一、私有仓库搭建
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --nameregistry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog看到{repositories:[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key保存退出。此步用于让 docker 信任私有仓库地址注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{insecure-registries:[私有仓库服务器ip:5000]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
二、将镜像上传至私有仓库
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
三、 从私有仓库拉取镜像
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7