目录
1.初识docker
1.1docker简介
大型项目中组件比较多,运行环境也较复杂,部署时会碰到一些问题。
nodejs redis mysql等都会部署到服务器linux等操作系统上 而这些应用都会有一些依赖,函数库等,这些依赖函数库都会有一些差异,调试好得开发环境还不适用于测试,生产等环境,所以通过docker来解决这些部署得问题。
通过docker将运行环境一起打包(函数库,依赖,配置等),仅限于同一操作系统。
系统得底层逻辑
内核通过简单得指令调用计算机硬件 系统应用(ubungtu centos)它会将系统应用组装在封装行程一个函数组成函数库 程序员通过函数库调用指令 指令调用硬件。
所以系统不同函数库也不相同 无法跨系统运行。
docker直接打包函数库 可以说只要是linux都可以。
总结一下 docker就是一个快速交付,运行应用的技术。
1.2 docker与虚拟机的区别
hypervisor 可以模拟各种计算机的硬件,所以可以模拟各种系统从而实现虚拟机。
docker直接调用操作系统内核所以它的执行性能要比虚拟机好很多。
1.3 docker架构
主要是镜像和容器
镜像(Image):docker将应用程序及其所需的依赖,函数库,环境,配置等文件打包,称为镜像
容器(container):镜像中的应用程序运行后形成的进程就是容器,只有docker会对容器隔离,对外部可见。
隔离的目的是不污染镜像文件 ,如写的数据,日志等之存在于自己的容器中
mysql nginx这些其实去官方文档pull就可以 不用自己创建除非是私人的应用。
1.4 安装docker
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
2. docker基本操作
2.1 镜像操作
本地有的话 用 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 #加载
2.2 docker容器相关
停止是直接杀死进程 暂停暂时挂起还可以使用
因为每个容器都是相对隔离的 外界无法访问 只有通过映射的方式
53cb是每个运行的容器id 都是唯一的
通过docker ps 可以看到
容器id 容器 命令 创建时间 状态 端口
需要用到sed修改到其中几项(后面基本用不到,也不方便)主要的命令是:
docker exec -it 名字 bash
2.3 数据卷
针对于2.2修改内容麻烦的问题 还有数据不可复用,升级维护困难等所以这里需要数据卷。
数据卷(volume):是一个虚拟目录,指向主机文件系统中的某个目录。
(个人理解就是 数据卷搭桥 把宿主中的文件和容器中的相关联,直接改宿主机文件即可 使得可以便于修改升级)
会 dockers volume –help 就行
2.3.1 挂载数据卷
通过 -v volume:容器内的地址 即可修改 修改文件时可以用文件编译器直接修改不用vim
通过宿主文件挂载
去 hub.docker.com 官方文档搜索mysql 就会有如下的各种文档 使用方法 文件位置等:
两种挂载对比:
通过volume挂载:
优点:使用数据卷时 docker会帮我们创建目标目录,docker挂载只需要挂载到卷上即可。不需要关心目录的位置。属于全权交给docker处理不用我们操心。
缺点:目录不是我们创建在哪里也不知道,去找比较麻烦。
通过目录挂载:
自己创建文件 位置清楚,将来定位文件一目了然。 偏麻烦一点。
3.自定义镜像
之前使用得都是dockerhub官方制作得镜像 mysql nginx redis等 但是自己私人得java -jar项目只有自己制作与推送所以以下是关于自定义镜像得内容。
3.1 镜像得结构
镜像:镜像是将应用程序,还有应用所需要得系统函数库,配置,环境,依赖打包而成。
拿mysql举例:
3.2 dockerfile
# 指定基础镜像 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来操作
4.dockercompose
4.1 dockercompose是什么及下载
DockerCompose就是把Docker run得各种指令转换成指令去定义
上图左右可以一一对应 也可以去官网文档查看。
下载方式:
可以去官方文档下载
x是文件控制权
绿色代表可以执行。
自动补全,可以有提示。
4.2 部署微服务集群
通过docker-compose up -d 后台运行 stop restart down等命令
docker-compose logs -f 查看日志
docker-compose ps 看运行
主要是docker compose得编写(图二)
5 Docker镜像仓库
管理镜像得仓库。无论是官方得镜像还是我们私有得java镜像。
搭建
推送
拉取
私有仓库主要注重得是隐私和安全。
图形化是依赖于官方registry得基础上个人编写得,是一个额外得服务 ,所以我们通过docker compose 将两者组合部署
然后将ui命令复制到mkdir docker-ui touch docker-compose.yml 中
docker-compose up -d #启动
docker-compose logs -f #查看日志
向私有仓库推送 必须先tag 改成带有私有仓库地址/名称:版本号的形式。
私有仓库的样子:
原文链接:https://blog.csdn.net/xujiangyu1/article/details/128880768?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836884016800182130287%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836884016800182130287&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-5-128880768-null-null.nonecase&utm_term=docker%E9%83%A8%E7%BD%B2