赞
踩
目录
大型项目中组件比较多,运行环境也较复杂,部署时会碰到一些问题。
nodejs redis mysql等都会部署到服务器linux等操作系统上 而这些应用都会有一些依赖,函数库等,这些依赖函数库都会有一些差异,调试好得开发环境还不适用于测试,生产等环境,所以通过docker来解决这些部署得问题。
通过docker将运行环境一起打包(函数库,依赖,配置等),仅限于同一操作系统。
系统得底层逻辑
内核通过简单得指令调用计算机硬件 系统应用(ubungtu centos)它会将系统应用组装在封装行程一个函数组成函数库 程序员通过函数库调用指令 指令调用硬件。
所以系统不同函数库也不相同 无法跨系统运行。
docker直接打包函数库 可以说只要是linux都可以。
总结一下 docker就是一个快速交付,运行应用的技术。
hypervisor 可以模拟各种计算机的硬件,所以可以模拟各种系统从而实现虚拟机。
docker直接调用操作系统内核所以它的执行性能要比虚拟机好很多。
主要是镜像和容器
镜像(Image):docker将应用程序及其所需的依赖,函数库,环境,配置等文件打包,称为镜像
容器(container):镜像中的应用程序运行后形成的进程就是容器,只有docker会对容器隔离,对外部可见。
隔离的目的是不污染镜像文件 ,如写的数据,日志等之存在于自己的容器中
mysql nginx这些其实去官方文档pull就可以 不用自己创建除非是私人的应用。
docker分为ce和ee 两个版本 ce为社区版(免费支持7个月),ee企业版,强调安全,付费使用支持24个月。
centos 上安装docker docker ce支持64位版本的centos 7 ,并且要求内核版本不低于3.10,centos 7 满足地内核的要求,所以我们在centos 7安装docker。
卸载(如果有的情况下):
- yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-selinux \
- docker-engine-selinux \
- docker-engine \
- docker-ce
安装docker:
- yum install -y yum-utils \
- device-mapper-persistent-data \
- lvm2 --skip-broken
更新本地镜像源:
(因为默认下载是在国外的网站,速度较慢 所以通过yum工具配置安装仓库 在阿里云)
- yum-config-manager \
- --add-repo \
- https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
- sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
-
- yum makecache fast
输入命令安装:
yum install -y docker-ce
docker应用需要用到各种端口,逐一去修改防火墙设置,很麻烦所以在此直接关闭防火墙。
启动docker前,一定要关闭防火墙!!!
- # 关闭
- systemctl stop firewalld
- # 禁止开机启动防火墙
- systemctl disable firewalld
通过命令启动docker;
- systemctl start docker #启动docker
-
- systemctl stop docker #停止docker
-
- systemctl restart docker #重启docker
-
- systemctl status dockers #查看docker状态
查看docker版本
docker -v
配置镜像
docker官方镜像仓库网速较差,我们需要设置国内镜像:
参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
- sudo mkdir -p /etc/docker
- sudo tee /etc/docker/daemon. json <<-'EOF'
- {
- "registry-mirrors":[" https://d6g8dchp.mirror.aliyuncs.com "]
- }
- EOF
- sudo systemctl daemon-reload
- sudo systemctl restart docker
创建一个文件 将网址写入daemon.json 重新加载 重启docker
本地有的话 用 docker build 从服务器拉取的话用pull 大多数都是pull
U盘copy的话用 docker save 加载的话 用docker load
docker --help 就是关于docker的所有命令
详细的 镜像命令的话为 docker images --help
下载镜像的话 去dockerhub 官网搜索相关的镜像即可 如nginx:
docker pull nginx 为拉取最新的版本
打包:(应用--help)
- docker save -o nginx.tar nginx:latest #打包
-
- docker rmi nginx #删除
-
- docker images #查看
-
- docker load -i nginx.tar #加载
停止是直接杀死进程 暂停暂时挂起还可以使用
因为每个容器都是相对隔离的 外界无法访问 只有通过映射的方式
53cb是每个运行的容器id 都是唯一的
通过docker ps 可以看到
容器id 容器 命令 创建时间 状态 端口
需要用到sed修改到其中几项(后面基本用不到,也不方便)主要的命令是:
docker exec -it 名字 bash
针对于2.2修改内容麻烦的问题 还有数据不可复用,升级维护困难等所以这里需要数据卷。
数据卷(volume):是一个虚拟目录,指向主机文件系统中的某个目录。
(个人理解就是 数据卷搭桥 把宿主中的文件和容器中的相关联,直接改宿主机文件即可 使得可以便于修改升级)
会 dockers volume --help 就行
2.3.1 挂载数据卷
通过 -v volume:容器内的地址 即可修改 修改文件时可以用文件编译器直接修改不用vim
通过宿主文件挂载
去 hub.docker.com 官方文档搜索mysql 就会有如下的各种文档 使用方法 文件位置等:
两种挂载对比:
通过volume挂载:
优点:使用数据卷时 docker会帮我们创建目标目录,docker挂载只需要挂载到卷上即可。不需要关心目录的位置。属于全权交给docker处理不用我们操心。
缺点:目录不是我们创建在哪里也不知道,去找比较麻烦。
通过目录挂载:
自己创建文件 位置清楚,将来定位文件一目了然。 偏麻烦一点。
之前使用得都是dockerhub官方制作得镜像 mysql nginx redis等 但是自己私人得java -jar项目只有自己制作与推送所以以下是关于自定义镜像得内容。
镜像:镜像是将应用程序,还有应用所需要得系统函数库,配置,环境,依赖打包而成。
拿mysql举例:
- # 指定基础镜像
- FROM ubuntu:16.04
- # 配置环境变量,JDK的安装目录
- ENV JAVA_DIR=/usr/local
-
- # 拷贝jdk和java项目的包
- COPY ./jdk8.tar.gz $JAVA_DIR/
- COPY ./docker-demo.jar /tmp/app.jar
-
- # 安装JDK
- RUN cd $JAVA_DIR \
- && tar -xf ./jdk8.tar.gz \
- && mv ./jdk1.8.0_144 ./java8
-
- # 配置环境变量
- ENV JAVA_HOME=$JAVA_DIR/java8
- ENV PATH=$PATH:$JAVA_HOME/bin
-
- # 暴露端口
- EXPOSE 8090
- # 入口,java项目的启动命令
- ENTRYPOINT java -jar /tmp/app.jar
一目了然步骤很清晰 从 from得基础镜像 环境变量得目录 到最后启动。
修改只需更改第八行得包名即可。
- systemctl start docker #启动docker
- docker build -t javaweb:1.0 . #-t表示版本 后面得" ."代表当前目录。
- docker images #查看当前得镜像
- docker run --name javaweb -p 8090:8090 -d javaweb:1.0 #启动
- docker ps #查看当前得进程(容器)
去浏览器访问即可。
也可以通过alpine来操作
DockerCompose就是把Docker run得各种指令转换成指令去定义
上图左右可以一一对应 也可以去官网文档查看。
下载方式:
可以去官方文档下载
x是文件控制权
绿色代表可以执行。
自动补全,可以有提示。
通过docker-compose up -d 后台运行 stop restart down等命令
docker-compose logs -f 查看日志
docker-compose ps 看运行
主要是docker compose得编写(图二)
管理镜像得仓库。无论是官方得镜像还是我们私有得java镜像。
搭建
推送
拉取
私有仓库主要注重得是隐私和安全。
图形化是依赖于官方registry得基础上个人编写得,是一个额外得服务 ,所以我们通过docker compose 将两者组合部署
然后将ui命令复制到mkdir docker-ui touch docker-compose.yml 中
docker-compose up -d #启动
docker-compose logs -f #查看日志
向私有仓库推送 必须先tag 改成带有私有仓库地址/名称:版本号的形式。
私有仓库的样子:
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。