视频网站的广告能怎么做,廊坊首页霸屏排名优化,江苏省住建厅官方网,网站流量数据分析怎么做文章目录 前言一、初识Docker1.初识Docker-Docker概述2.初识Docker-安装Docker3.初识Docker-Docker架构4.初识Docker-配置镜像加速器 二、Docker命令1.Docker命令-服务相关命令2.Docker命令-镜像相关命令3.Docker命令-容器相关命令 三、Docker容器的数据卷1.Docker容器数据卷-数… 文章目录 前言一、初识Docker1.初识Docker-Docker概述2.初识Docker-安装Docker3.初识Docker-Docker架构4.初识Docker-配置镜像加速器 二、Docker命令1.Docker命令-服务相关命令2.Docker命令-镜像相关命令3.Docker命令-容器相关命令 三、Docker容器的数据卷1.Docker容器数据卷-数据卷概念及作用2.Docker容器数据卷-配置数据卷3.Docker容器数据卷-数据卷容器 四、Docker应用部署1.Docker应用部署-部署MySQL2.Docker应用部署-部署Tomcat3.Docker应用部署-部署Nginx4.Docker应用部署-部署Redis 五、Dockerfile1.Dockerfile-镜像原理2.Dockerfile-容器转为镜像3.Dockerfile-Dockerfile概述及关键字4.Dockerfile-案例-部署springboot项目5.Dockerfile-案例-自定义centos 六、Docker服务编排1.Docker Compose-概述2.Docker Compose-安装使用3.使用Docker Compose编排nginxspringboot项目 七、Docker私有仓库1.Docker私有仓库-搭建2.Docker私有仓库-上传镜像3.Docker私有仓库-拉取镜像 八、Docker相关概念1.Docker和虚拟机比较 九、Docker参考手册 此文档来源于网络,如有侵权请联系删除 前言 Docker 是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中然后发布到任何流行的 Linux 或 Windows 操作系统的机器上也可以实现虚拟化。容器是完全使用沙箱机制相互之间不会有任何接口。 一、初识Docker
1.初识Docker-Docker概述
Docker是一个开源的应用容器引擎诞生于2013年初基于Go 语言实现dotCloud公司出品后改名为Docker lncDocker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的Linux机器上。容器时完全使用沙箱机制相互隔离容器性能开销极低Docker从17.03版本之后分为CECommunity Edition社区版和 EEEnterprise Edition企业版 小结Docker是一种容器技术解决软件跨环境迁移的问题 2.初识Docker-安装Docker
Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上本文基于CentOS7安装Docker。
官网https://www.docker.com/
使用官方安装脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun查看Docker版本验证是否安装成功
docker -v3.初识Docker-Docker架构
Docker 包括三个基本概念
镜像lmageDocker镜像lmage就相当于是个root文件系统。比如官方镜像Ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。容器Container镜像lmage和容器Container的关系就像是面向对象程序设计中的类和对象一样镜像是静态的定义容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。仓库Repository仓库可看成一个代码控制中心用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式使用远程API来管理和创建Docker容器。 Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
4.初识Docker-配置镜像加速器
默认情况下将来从DockerHub https://hub.docker.com/上下载Docker镜像太慢。一般都会配置镜像加速器。
国内从 DockerHub 拉取镜像有时会遇到困难此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务例如
科大镜像https://docker.mirrors.ustc.edu.cn/网易https://hub-mirror.c.163.com/七牛云加速器https://reg-mirror.qiniu.com阿里云https://你的ID.mirror.aliyuncs.com 我们这边配置阿里云镜像加速器 阿里云官网https://www.aliyun.com/
1.访问阿里云官网→登录阿里云没有阿里云账号就先注册在登录
2.控制台→三条横杆→搜索 “镜像” →容器镜像服务 3.镜像工具→镜像加速器 4.选择自己安装的系统版本→复制命令粘贴执行 sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://你的ID.mirror.aliyuncs.com]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker注意一次性全部复制粘贴最后一行命令会没有粘贴成功注意查看将最后一行命令重新复制粘贴执行即可 二、Docker命令
1.Docker命令-服务相关命令 启动Docker服务 systemctl start docker停止Docker服务 systemctl stop docker重启Docker服务 systemctl restart docker查看Docker服务状态 systemctl status docker开机启动Docker服务设置开机自启 systemctl enable docker2.Docker命令-镜像相关命令 查看镜像 docker images #docker images 列出本地主机上的镜像。各个选项说明 选项名称说明REPOSITORY表示镜像的仓库源TAG镜像的标签IMAGE ID镜像IDCREATED镜像创建时间SIZE镜像大小查看所有镜像的IMAGE ID #查看所有镜像的IMAGE ID
docker images -q搜索镜像 比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。 docker search 镜像名 #从网络中查找需要的镜像各个选项说明 选项名称说明NAME镜像仓库源的名称DESCRIPTION镜像的描述STARS类似 Github 里面的 star表示点赞、喜欢的意思OFFICIAL是否 docker 官方发布AUTOMATED自动构建 拉取镜像 当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像我们可以使用 docker pull 命令来下载它。 docker pull 镜像名:版本号 #不跟:版本号会自动下载最新的版本latest例子
docker pull redisdocker pull redis:5.0#查看本地主机上的镜像。
docker images想知道有哪些镜像版本可以下载可以去官网搜索查看http://hub.docker.com/ 删除镜像
方法一根据IMAGE ID删除
docker rmi IMAGE ID例子
docker rmi 7614ae9453d1方法二根据镜像名版本号删除
docker rmi redis:5.0 #有的时候IMAGE ID会重复导致报错可以使用这个方法删除方法三删除全部
#查看所有镜像的IMAGE ID
docker images -q#删除所有镜像相当于把docker images -q命令执行 的结果当成参数去删除
docker rmi docker images -q3.Docker命令-容器相关命令
查看容器
语法
docker ps [OPTIONS]OPTIONS说明
参数作用-a显示所有的容器包括未运行的-f根据条件过滤显示的内容–format指定返回值的模板文件-l显示最近创建的容器-n列出最近创建的n个容器–no-trunc不截断输出-q静默模式只显示容器编号-s显示总的文件大小
实例
#列出所有在运行的容器信息
docker ps#列出所有未运行、在运行的容器信息
docker ps -a输出详情介绍
名称含义CONTAINER ID容器 IDIMAGE使用的镜像COMMAND启动容器时运行的命令CREATED容器的创建时间STATUS容器状态 状态有7种created已创建、restarting重启中、running运行中、removing迁移中、paused暂停、exited停止、dead死亡PORTS容器的端口信息和使用的连接类型tcp\udpNAMES自动分配的容器名称
创建容器 docker run 创建一个新的容器并运行一个命令 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明
参数作用-a stdin指定标准输入输出内容类型可选 STDIN/STDOUT/STDERR 三项-d后台运行容器并返回容器ID-i以交互模式运行容器通常与 -t 同时使用-P随机端口映射容器内部端口随机映射到主机的端口-p指定端口映射格式为主机(宿主)端口:容器端口-t为容器重新分配一个伪输入终端通常与 -i 同时使用–name“nginx-lb”为容器指定一个名称–dns 8.8.8.8指定容器使用的DNS服务器默认和宿主一致–dns-search example.com指定容器DNS搜索域名默认和宿主一致-h “mars”指定容器的hostname-e username“ritchie”设置环境变量–env-file[]从指定文件读入环境变量–cpuset“0-2” or --cpuset“0,1,2”绑定容器到指定CPU运行-m设置容器使用内存最大值–net“bridge”指定容器的网络连接类型支持 bridge/host/none/container: 四种类型–link[]添加链接到另一个容器–expose[]开放一个端口或一组端口–volume , -v绑定一个卷
实例 docker run -it --namemycentos centos:7 /bin/bashdocker run -id --namemycentos1 centos:7 /bin/bash说明 ①使用-it这两个参数后容器创建后自动进入容器中退出容器后容器自动关闭 ②使用-d参数后需要使用docke rexec进入容器。退出后容器不会关闭。 ③-it创建的容器一般称为交互式容器-id创建的容器一般称为守护式容器 进入容器 在使用 -d 参数时容器启动后会进入后台。此时想要进入容器可以通过以下指令进入 docker attach连接到正在运行中的容器。 语法
docker attach [OPTIONS] CONTAINER实例 注意 如果从这个容器退出会导致容器的停止。 docker exec在运行的容器中执行命令。推荐大家使用 docker exec 命令因为此命令会退出容器终端但不会导致容器的停止。 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS说明
参数作用-d分离模式: 在后台运行-i即使没有附加也保持STDIN 打开-t分配一个伪终端
实例
docker exec -it mycentos1 /bin/bash注意 如果从这个容器退出容器不会停止这就是为什么推荐大家使用 docker exec 的原因。 启动容器
#使用 docker start 启动一个已停止的容器
docker start 容器名|容器 ID 停止容器
#使用 docker stop 停止一个正在运行的容器
docker stop 容器名|容器 ID重启容器
docker restart 容器名|容器 ID删除容器
docker rm 容器名|容器 ID查看容器信息 docker inspect : 获取容器/镜像的元数据。 语法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]OPTIONS说明
参数作用-f指定返回值的模板文件-s显示总的文件大小–type为指定类型返回JSON 三、Docker容器的数据卷
1.Docker容器数据卷-数据卷概念及作用
思考
Docker容器删除后在容器中产生的数据也会随之销毁Docker 容器和外部机器可以直接交换文件吗?容器之间想要进行数据交互?
数据卷
数据卷是宿主机中的一个目录或文件当容器目录和数据卷目录绑定后对方的修改会立即同步一个数据卷可以被多个容器同时挂载一个容器可以被挂载多个数据卷
数据卷概念
宿主机的一个目录或文件
数据卷作用
容器数据持久化外部机器和容器间接通信容器之间数据交换
2.Docker容器数据卷-配置数据卷
创建启动容器时使用 -v 参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...注意事项 1.目录必须是绝对路径2.如果目录不存在会自动创建3.可以挂载多个数据卷
实例创建容器配置数据卷外部机器和容器间接通信
docker run -it --namecentos1 -v /root/data:/root/data_container centos:7 /bin/bash当容器目录和数据卷目录绑定后对方的修改会立即同步 实例删除容器后重新挂载容器容器数据持久化 实例一个容器挂载多个目录 实例两个容器挂载到同一个目录实现容器之间数据交换
1.创建一个容器挂载到 /root/data 目录下 2. 查看容器 /root/data 目录下的内容
3. 打开一个新的会话窗口再创建一个容器挂载到 /root/data 目录下添加内容到test.txt文件中 4. 回到第一个会话窗口会查看test.txt文件会发现当前容器目录下也添加了内容 3.Docker容器数据卷-数据卷容器
多个容器进行数据交换
多个容器挂载同一个数据卷数据卷容器
数据卷容器
创建一个容器挂载一个目录让其他容器继承自该容器–volumes-from通过简单方式实现数据卷配置 配置数据卷容器 创建启动 centos3 数据卷容器使用 -v 参数设置数据卷 docker run -it --namecentos3 -v /volume centos:7 bin/bash创建启动 centos1 centos2 容器使用 --volumes-from 参数设置数据卷使用新的会话窗口 docker run -it --namecentos1 --volumes-from centos3 centos:7 bin/bash
docker run -it --namecentos2 --volumes-from centos3 centos:7 bin/bash测试在 centos1 centos2 任意一个容器的volume目录下创建文件centos1 centos2 centos3的volume目录下都会生成对应的文件
四、Docker应用部署
1.Docker应用部署-部署MySQL 案例需求在Docker容器中部署MySQL并通过外部MySQL客户端操作MySQL服务 案例实现步骤 ①搜索MySQL镜像 ②拉取MySQL镜像 ③创建容器 ④操作容器中的MySQL
MySQL部署 容器内的网络服务和外部机器不能直接通信外部机器和宿主机可以直接通信宿主机和容器可以直接通信当容器中的网络服务需要被外部机器访问时可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的该端口从而间接访问容器的服务。这种操作称为端口映射
一、搜索MySQL镜像
docker search mysql二、拉取MySQL镜像
docker pull mysql:latest三、查看本地镜像
docker images四、在 /root 目录下创建mysql目录用于存储mysql数据信息进入到mysql目录中
#创建mysql目录
mkdir mysql
#进入到mysql目录
cd mysql五、创建容器设置端口映射、目录映射
docker run -id \
-p 3306:3306 \
--namemysql-test \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD123456 \
mysql:latest参数说明 -p 3306:3306映射容器服务的 3306 端口到宿主机的 3306 端口外部主机可以直接通过 宿主机 ip:3306 访问到 MySQL 的服务。冒号前面代表的是宿主机端口号。-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。数据目录MYSQL_ROOT_PASSWORD123456设置 MySQL 服务 root 用户的密码。
六、进入到MySQL容器中
docker exec -it mysql-test /bin/bash七、登录MySQL
mysql -uroot -p123456外部访问Doker中的MySQL容器
1.使用Windows的cmd窗口远程连接 2.使用DataGrip 连接 3.使用navicat连接由于navicat版本问题连接报错 远程连接Docker中的MySQL容器注意事项 确保MySQL开放了远程连接的权限 执行查询语句查看数据库当前的访问权限的信息 select User,authentication_string,Host from user;确保Docker宿主机防火墙开放了MySQL的端口号或者直接关闭防火墙
2.Docker应用部署-部署Tomcat 案例需求在Docker容器中部署Tomcat并通过外部机器访问Tomcat部署的项目。 案例实现步骤 ①搜索Tomcat镜像 ②拉取Tomcat镜像 ③创建容器 ④部署项目 ⑤测试访问
Tomcat部署
一、搜索Tomcat镜像
docker search tomcat二、拉取Tomcat镜像
docker pull tomcat三、查看本地镜像
docker images四、在 /root 目录下创建tomcat目录用于存储tomcat数据信息进入到tomcat目录中
#创建tomcat目录
mkdir tomcat
#进入到tomcat目录
cd tomcat五、创建容器设置端口映射、目录映射
docker run -id \
-p 8080:8080 \
--nametomcat-test \
-v $PWD:/usr/local/tomcat/webapps \
tomcat:latest参数说明 -p 8080:8080将容器的8080端口映射到主机的8080端口-v $PWD:/usr/local/tomcat/webapps将主机当前目录挂载到容器的webapps
六、部署项目
#创建test文件夹
mkdir test
#进入到test目录
cd test
#创建并编辑index.html文件
vim index.html
#index.html文件内容
h1 hellow tomcat docker /h1七、测试访问
#打开浏览器地址栏输入ip地址:端口号/项目路径
192.168.3.240:8080/test/index.html3.Docker应用部署-部署Nginx 案例需求在Docker容器中部署Nginx并通过外部机器访问Nginx。 案例实现步骤 ①搜索Tomcat镜像 ②拉取Tomcat镜像 ③创建容器 ④测试访问
Nginx部署
一、搜索Nginx镜像
docker search nginx二、拉取Nginx镜像
docker pull nginx三、查看本地镜像
docker images四、在 /root 目录下创建nginx目录用于存储nginx数据信息进入到nginx目录中
#创建nginx目录
mkdir nginx
#进入到nginx目录
cd nginx五、在 /root/nginx/目录下创建conf文件夹进入conf目录创建并编辑nginx.conf文件粘贴下面内容
#创建conf目录
mkdir conf
#进入到conf目录
cd conf
#创建并编辑nginx.conf文件
vim nginx.confnginx.conf文件内容
user 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 \
-p 80:80 \
--namenginx-test \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx:latest参数说明 -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。日志目录
七、测试访问
#进入到html目录
cd html
#创建并编辑index.html文件
vim index.html
#index.html文件内容
h1 hellow nginx docker /h1浏览器访问IP地址进行测试 4.Docker应用部署-部署Redis 案例需求在Docker容器中部署Redis并通过外部机器访问Redis。 案例实现步骤 ①搜索Redis镜像 ②拉取Redis镜像 ③创建容器 ④测试访问
Redis部署
一、搜索Nginx镜像
docker search redis二、拉取Nginx镜像
docker pull redis三、查看本地镜像
docker images三、创建容器设置端口映射
docker run -id --nameredis-test -p 6379:6479 redis:latest四、连接redis
通过 redis-cli 连接测试使用 redis 服务。
#进入redis-test容器
docker exec -it redis-test /bin/bash
#连接redis
redis-cli五、Dockerfile
1.Dockerfile-镜像原理
操作系统组成部分
进程调度子系统进程通信子系统内存管理子系统设备管理子系统文件管理子系统网络通信子系统作业控制子系统
Linux文件系统由bootfs和rootfs两部分组成
bootfs包含bootloader引导加载程序和kernel内核rootfsroot文件系统包含的就是典型Linux系统中的/dev/proc/bin/etc等标准目录和文件不同的linux发行版bootfs基本一样而rootfs不同如ubuntucentos等
Docker镜像原理
Docker镜像是由特殊的文件系统叠加而成最底端是 bootfs并使用宿主机的bootfs第二层是 root文件系统rootfs称为base image然后再往上可以叠加其他的镜像文件统一文件系统Union File System技术能够将不同的层整合成一个文件系统为这些层提供了一个统一的视角这样就隐藏了多层的存在在用户的角度看来只存在一个文件系统。一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像最底部的镜像成为基础镜像当从一个镜像启动容器时Docker会在最顶层加载一个读写文件系统作为容器 Docker镜像的本质是什么 是一个分层文件系统 Docker中的一个centos镜像为什么只有200M而一个centos操作系统的iso文件要几个G Centos的iso镜像文件包含bootfs和rootfs而Docker的centos镜像复用操作系统的bootfs只有rootfs和其他镜像层 Docker中一个tomcat镜像为什么又600MB而一个tomcat安装包只有70多MB 由于docker中镜像是分层的tomcat虽然只有70多MB但他需要依赖于父镜像和基础镜像所有整个对外暴露的tomcat镜像大小600多MB
2.Dockerfile-容器转为镜像 Docker镜像如何制作 一.容器转为镜像 将容器转为镜像 docker commit 容器id 新的镜像名称:版本号将镜像转为压缩文件容器没办法传给其他人只有将容器转为压缩文件才能进行传输 docker save -o 压缩文件名称 镜像名称:版本号将压缩文件转为镜像 docker load -i 压缩文件名称例子 1.查看容器 docker ps -a2.将容器转为镜像 docker commit 容器id 新的镜像名称:版本号docker commit 2b9e6a802d93 tomcat-1:1.03.将镜像转为压缩文件 docker save -o 压缩文件名称 镜像名称:版本号docker save -o tomcat.tar tomcat-1:1.04.删除镜像 docker rmi 8a3fa5474e0f5.将压缩文件转为镜像 docker load -i 压缩文件名称docker load -i tomcat.tar二.dockerfile
3.Dockerfile-Dockerfile概述及关键字 什么是 Dockerfile Dockerfile 是一个用来构建镜像的文本文件文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile概念
Dockerfile是一个文本文件包含了一条条的指令每一条指令构建一层基于基础镜像最终构建出一个新的镜像对开发人员可以为开发团队提供一个完全一致的开发环境对于测试人员可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
Dockerfile 指令说明FROM指定基础镜像用于后续的指令构建。MAINTAINER指定Dockerfile的作者/维护者。已弃用推荐使用LABEL指令LABEL添加镜像的元数据使用键值对的形式。RUN在构建过程中在镜像中执行命令。CMD指定容器创建时的默认命令。可以被覆盖ENTRYPOINT设置容器创建时的主要命令。不可被覆盖EXPOSE声明容器运行时监听的特定网络端口。ENV在容器内部设置环境变量。ADD将文件、目录或远程URL复制到镜像中。COPY将文件或目录复制到镜像中。VOLUME为容器创建挂载点或声明卷。WORKDIR设置后续指令的工作目录。USER指定后续指令的用户上下文。ARG定义在构建过程中传递给构建器的变量可使用 “docker build” 命令设置。ONBUILD当该镜像被用作另一个构建过程的基础时添加触发器。STOPSIGNAL设置发送给容器以退出的系统调用信号。HEALTHCHECK定义周期性检查容器健康状态的命令。SHELL覆盖Docker中默认的shell用于RUN、CMD和ENTRYPOINT指令。
4.Dockerfile-案例-部署springboot项目
案例需求 定义dockerfile发布springboot项目 实现步骤
1.创建一个springboot项目 2.项目打包 注意事项项目打包JDK版本要跟后面创建容器所依赖的父镜像JDK版本一致否者可能导致创建的容器无法运行 3.jar包测试运行 4.下载一个java镜像用来运行jar包根据自己的springboot打包所依赖的JDK版本一致 注意事项这里的java版本要与打包springboot的JDK版本一致否者可能导致创建的容器无法运行 docker pull java:85.创建一个名为 docker-files 的文件夹
mkdir docker-files6.进入到 docker-files 目录下上传打包好的jar包 7.创建并编辑 springboot-dockerfile文件
vim springroot-dockerfile文件内容
FROM java:8
MAINTAINER xiongjian
ADD springboot-hello-0.0.1-SNAPSHOT.jar springboot-hello.jar
CMD java -jar springboot-hello.jar说明 定义父镜像FROM java:8定义作者信息MAINTAINER xiongjian将jar包添加到容器ADD springboot-hello-0.0.1-SNAPSHOT.jar springboot-hello.jar定义容器启动执行的命令CMD java -jar springboot-hello.jar 8.通过 dockerfile 构建镜像
docker build -f 文件名 -t 镜像名称:镜像标签 .最后的.代表本次执行的上下文路径上下文路径是指 docker 在构建镜像有时候想要使用到本机的文件比如复制docker build 命令得知这个路径后会将路径下的所有内容打包。 解析由于 docker 的运行模式是 C/S。我们本机是 Cdocker 引擎是 S。实际的构建过程是在 docker 引擎下完成的所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。 如果未说明最后一个参数那么默认上下文路径就是 Dockerfile 所在的位置。 注意上下文路径下不要放无用的文件因为会一起打包发送给 docker 引擎如果文件过多会造成过程缓慢。 docker build -f springroot-dockerfile -t springboot-hello .8.创建运行容器
docker run -id --name springboot-hello -p 9000:8080 springboot-hello:latest9.外部测试
docker宿主机IP地址:端口号/访问的项目5.Dockerfile-案例-自定义centos
案例需求 自定义centos7镜像。要求 1.默认登录路径为/usr 2.可以使用vim 实现步骤
1.在 ~ 目录下创建一个名为 docker-files 文件夹
mkdir docker-files2.进入 docker-files 目录创建即编辑 contos-dockerfile 文件
vim centos-dockerfile文件内容
FROM centos:7
MAINTAINER xiongjian
RUN yum -y install vim
WORKDIR /usr
CMD /bin/bash说明 定义父镜像FROM java:8定义作者信息MAINTAINER xiongjian执行安装vim命令RUN yum -y install vim定义默认的工作目录WORKDIR /usr定义容器启动执行的命令CMD /bin/bash
3.构建镜像
docker build -f 文件名 -t 镜像名称:镜像标签 .docker build -f centos-dockerfile -t centos-test:1 .4.创建运行容器如图所示默认登录路径为/usr
docker run -it --namecentos-test centos-test:1六、Docker服务编排
服务编排按照一定的业务规则批量管理容器 微服务架构的应用系统中一般包含若干个微服务每个微服务一般都会部署多个实例如果每个微服务都要手动启停维护的工作量会很大。 要从Dockerfile build image 或者去dockerhub拉取 image要创建多个container要管理这些container(启动停止删除)
1.Docker Compose-概述
Docker Compose简介
DockerCompose是一个编排多容器分布式部署的工具提供命今集管理容器化应用的完整开发周期包括服务构建启动和停止。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤
使用 Dockerfile 定义应用程序的环境。使用 docker-compose.yml 定义构成应用程序的服务这样它们可以在隔离环境中一起运行。最后执行 docker-compose up 命令来启动并运行整个应用程序。
2.Docker Compose-安装使用
Docker Compose 安装
1.安装Compose
Linux 上我们可以从 Github 上下载它的二进制包来使用最新发行的版本地址https://github.com/docker/compose/releases
运行以下命令以下载 Docker Compose 的当前稳定版本
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-uname -s-uname -m /usr/local/bin/docker-compose要安装其他版本的 Compose请替换 1.8.1。 2.设置文件可执行权限
chmod x /usr/local/bin/docker-compose3.测试是否安装成功
docker-compose versionDocker Compose卸载
二进制包方式安装的删除二进制文件即可
rm /usr/local/bin/docker-compose3.使用Docker Compose编排nginxspringboot项目 准备nginx镜像和springboot项目镜像(springboot项目镜像可以查看上面的部署springboot案例) ~ 目录下创建一个名为 docker-compose 的文件夹并进入到 docker-compose 目录下 mkdir docker-compose
cd docker-compose/创建并编辑名为 docker-compose.yml 文件 vim docker-compose.ymldocker-compose.yml文件内容 version: 2
services:nginx:image: nginxports:- 80:80links:- springboot-hellovolumes:- ./nginx/conf.d:/etc/nginx/conf.dspringboot-hello:image: springboot-helloexpose:- 8080注意事项version: ‘2’ 这里的版本要根据 docker-compose 版本所对应否者后面使用 docker-compose 启动容器会报错 创建 ./nginx/conf.d 目录 进入到 ./nginx/conf.d 目录下 mkdir -p ./nginx/conf.d
cd nginx/conf.d/创建nginx配置文件并添加内容 vim nginx.confnginx.conf 文件内容 server {listen 80;access_log off;location / {proxy_pass http://springboot-hello:8080;}}切换到 ~/docker-compose/ 目录下使用 docker-compose 启动容器 cd ~/docker-compose/
docker-compose up重新打开一个新的会话查看容器会发现启动了两个容器 docker ps -a测试访问
七、Docker私有仓库
Docker官方的 Docker hubhttps://hub.docker.com是一个用于管理公共镜像的仓库我们可以从上面拉取镜像到本地也可以把我们自己的镜像推送上去。但是有时候我们的服务器无法访问互联网或者你不希望将自己的镜像放到公网当中那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。
1.Docker私有仓库-搭建 拉取私有仓库镜像 docker pull registry启动私有仓库容器 docker run -id --nameregistry -p 5000:5000 registry访问私有仓库 打开浏览器输入地址 http://私有仓库服务器ip:5000/v2/_catalog看到 {“repositories”:[]} 表示私有仓库搭建成功 修改daemon.json配置文件 vim /etc/docker/daemon.json在上述文件中添加一个key保存退出。此步用于让docker信任私有仓库地址注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip 添加的内容 insecure-registries: [私有仓库服务器ip:5000]重启 docker 服务 systemctl restart docker私有仓库容器 重启docker服务导致私有仓库容器停止所以需要启动下私有仓库容器 docker start registry2.Docker私有仓库-上传镜像 标记镜像为私有仓库的镜像 docker tag centos:7 私有仓库服务器IP:5000/centos:7上传标记的镜像 docker push 私有仓库服务器IP:5000/centos:7访问测试私有仓库
3.Docker私有仓库-拉取镜像 删除镜像 docker rmi 192.168.3.240:5000/centos:7拉取镜像 docker pull 192.168.3.240:5000/centos:7八、Docker相关概念
1.Docker和虚拟机比较
Docker容器虚拟化 与 传统虚拟机比较
容器就是将软件打包成标准化单元以用于开发、交付和部署。
容器镜像是轻量的、可执行的独立软件包包含软件运行所需的所有内容代码、运行时环境、系统工具、系统库和设置。容器化软件在任何环境中都能够始终如一地运行。容器赋予了软件独立性使其免受外在环境差异的影响从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。 相同
容器和虚拟机具有相似的资源隔离和分配优势
不同
容器虚拟化的是操作系统虚拟机虚拟化的是硬件。传统虚拟机可以运行不同的操作系统容器只能运行同一类型操作系统
特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个 九、Docker参考手册
Docker 资源汇总https://www.runoob.com/docker/docker-resources.html
Docker命令大全https://www.runoob.com/docker/docker-command-manual.html 此文档来源于网络,如有侵权请联系删除