001/Docker入门(Mooc)
docker官网:https://www.docker.com/
1。什么是docker
2。Docker思想
==》
【1】。集装箱:保证程序完整(不缺东西,如配置文件等)。
【2】。标准化:开发测试都是使用一套环境
(1)。运输方式:选择传输应用的方式,如QQ,ftp等。(docker不用)
(2)。应用存储位置。(docker不需要你记住存储位置)
(3)。API接口:接品标化化用同样的命令控制所有应用
【3】。隔离:每个服务独自运行,互不影响
3。Docker解决什么问题
【1】。我本地环境没问题啊〜(docker集装箱解决该问题)
【2】。系统好卡,哪个同学又写死循环了〜(docker隔离性解决该问题,如:linux本来是多租户,允许多个用户使用。)
【3】。双11来了,服务器撑不住了。(节日前扩展机器,节后再下线节点。浪费。有了docker,即可随时扩充服务器。)
docker让快速扩展 & 弹性伸缩变得简单。
4。Docker核心技术
镜像:(集装箱)
仓库:(超级码头)
容器:(运行程序的地方)
用docker运行一个程序的过程:去仓库把镜像拉到本地,用一条命令,把镜像运行起来变成容器。
Build:构建镜像 [镜像 类比 集装箱]
Ship:运输镜像(从仓库 & 主机上运输)[仓库 类比 超级码头]
Run:运行镜像(运行的镜像就是一个容器)- [容器 就是 运行程序的地方]
5。Docker镜像
鲸鱼驮着的就是一堆镜像
Docker镜像:镜像就是一系列的文件,它可以包括应用程序,应用环境的文件,docker将它保存到本地,以什么格式保存(涉及技术linux的存储技术:联合文件系统)
联合文件系统:docker Unie fileSystem (分层)(可将不同目录挂在同一文件系统)
test1第一层,test2第二层。test联合文件系统可以看到test1和test2所有内容。
镜像存储格式:
最底层-》最顶层:
【1】操作系统引导 【2】具体linux操作系统 【3】相关软件,如tomcat/jdk【4】存储应用代码【5】容器(可修改)
以上这些均为一个文件系统,为一个docker镜像。
6。Docker容器
容器的本质就是一个进程。(容器在镜像的最上层为可读可写,镜像的其他层均为只读)
(可将容器理解为一个虚拟机)
Docker镜像的每一层都是只读的,而容器作为最上层,是可读可写的。如果程序需要对镜像进行修改,那么Docker会把要修改的镜像文件拷贝到最上层的容器中,然后再进行修改。往后对该文件的访问会优先从容器中读取,寻找文件的顺序是从下往下。
7。Docker仓库
构建镜像的目的是在其他环境或其他机器上运行我的程序。
需要将镜像传输到其他环境--应用docker仓库(构建镜像-》运输-》Docker仓库《- 目地的从docker仓库拉取镜像)
docker提供中央仓库:地址(hub.docker.com / c.163.com)
8。Docker安装
视频地址;https://www.imooc.com/video/14616 (windows/ mac /linux)
推荐linux,docker本身在linux研发,更源生。
9。第一个docker镜像
10。docker网络
网络类型:
1.Bridger:桥接模式(有独立的network namespace,即有独立IP和端口).与外界互通,需要端口映射。
2.Host:主机模式(与主机共用同一网卡)
3.NONE:无网络。docker容器不能与外界互通
- $docker run -d -p : hub.c..com/library/nginx
- //-d:指定后台进程
- //-p:映射端口 (主机端口:容器端口)
- $netstat -na | grep //查看8080是否被占用
- $docker run -d -P hub.c..com/library/nginx
- //随机映射端口
11。制作自己的镜像
【1】。Dockerfile
【2】。docker build
【3】。Jpress
http://jpress.io //开源的java-web应用
准备工作:
1。javaWar包。
2。java web依赖tomcat服务器,docker pull tomcat镜像
3。vi Dockerfile
- from tomcat镜像名 //tomcat作为基础镜像(tomcat包含jdk)
- MAINTAINER 所有者名 所有者联系方式 //所有者信息
- COPY jpress.war tomcat镜像webapp目录 //web应用放入镜像,运行自建javaweb程序
4。docker build -t 镜像名字 目录(.表示当前目录)
5。docker image ls //查看镜像
6。运行自己的容器
地址栏访问:http://localhost:8888/webappname 即可正常访问。
jpress项目需要mysql ,可在docker中安装一个mysql镜像即可.
……………………………………………………………………………………………………………………………………
Eg1:以本地java打war包为例,构建一个镜像
- Step1:以tomcat镜像为基础镜像
- docker pull tomcat //拉取tomcat镜像
- Step2:定制镜像
- touch Dockerfile #新建Dockerfile文件
- vi Dockerfile #编辑Dockerfile
- ##add content start
- FROM tomcat:latest
- MAINTAINER shiyufeng kaixinyufeng@sina.com
- COPY web-ssm-single.war /usr/local/tomcat/webapps
- ##add content end
- Step3:构建镜像
- docker build -t cfca-web:v1 . //在当前目录,构建一个cfca-web的镜像,tag为v1的镜像
- Step4:run镜像为容器
- docker run -d -p : cfca-web:v1 //-d后台守护进程 -p映射端口宿主机:容器 镜像名
- 地址栏访问:http://localhost:8089/web-ssm-single/即可。
命令行访问:
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single/
<html>
<body>
<h2>Hello World!</h2>
<h3><a href="/user/query">send request</a></h3>
</body>
</html>
地址栏访问:http://localhost:8089/web-ssm-single/
成功!!!
Eg2:以nginx为例:
- //Step1:从远程仓库拉取镜像
- docker pull nginx #未指定版本默认拉取最新镜像
- docker pull nginx:版本号 #指定版本号拉取
- //Step2:查看镜像
- docker image ls nginx
- //Step3:启动镜像-》容器
- docker run -d -p : nginx:latest
- #-d指定后台守护进程 -p指定映射宿主机:容器端口号 nginx指定镜像名称
- //docker ps #查看当前运行的容器
- //以上相当于在本地8088端口开启了一个nginx服务。
- //地址栏访问:localhost:8088 即显示welcome to nginx
- //停止容器
- docker stop 容器id
- //重新启动容器
- docker ps -a #查询所有容器
- docker start 容器id
- //在某一目录下新建index.html
- vi index.html
- <html><h1>yufeng learn docker!!!</h1></html>
- //拷备本地index.html文件到docker容器
- docker cp index.html 容器id://index.html文件所在容器路径
- docker cp index.html 容器id://usr/share/nginx/html
- //打开浏览器再次访问。页面显示新内容yufeng learn docker!!!
- //停止nginx容器 & 再重新运行nginx容器
- docker stop 容器id
- docker run -d -p : nginx:latest
- //浏览器再次访问:localhost:8088,会出现welcome to nginx。而非新内容
- //说明:docker在容器内所做的改动都是暂时的,都是未被保存的。
- //保存自定义内容
- docker cp index.html 容器id://usr/share/nginx/html
- docker commit -m '备注信息' 容器id 名字
- 上述会重新定制一个image
- docker run -d -p : Repository
注:上述用commit定制镜像不建议应用(命令无法找回)
推建Dockerfile文件定制镜像。
……………………………………………………………………………………………………………………………………
12。Volume:提供容器之外的持久化存储
方法一:
- //docker run运行一个容器,通过-v挂载一个卷
- $docker run -d --name nginx -v /usr/share/nginx/html nginx
- //-d 守护进程 --name指定名称 -v挂载一个卷 nginx容器名称
- $docker inspect nginx //检查
核心位置:
- $ ls /var/lib/docker/volumes/c92d78d64d6be29847ec12583cced83015d5fd43b6e43b5379463d3cf3110165/_data
- //会报无该目录。原因是mac上多了一层虚拟层alpha
- screen ~/library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
- //应用上述命令即可进入
- //退出screen ctrl + a ,再按 d 键暂时退出终端
方法二:volume本地目录挂载到容器目录中:
- $mkdir html
- $vi index.html
- ##content start
- <html>
- <h1>docker volume学习!</h1>
- </html>
- ##content end
- $docker run -d -p : -v $PWD/html:/usr/share/nginx/html nginx
- //-d:后台守护进程 -p:端口映射(宿主机:容器)
- //-v:数据卷 (本机目录:容器目录) nginx:镜像
- //$PWD:当前目录
- //验证
- curl http://localhost
- //修改本机index.html内容。再将执行curl。则容器index.html随主机变化而变化。
好处:只需要在本地修改,即可在容器中体现。
方法三:volume挂载一个容器到另一容器
- //step1:创建一个目录叫data
- $mkdir data
- //step2:创建一个容器,该容器仅仅用于存储数据
- docker create -v $PWD/data:/var/mydata --name data_container ubuntu
- // -v:volume $PWD:当前路径
- // /var/mydata容器中路径,自定义
- // -name指定容器名字
- // ubuntu指定基础镜像
- //Step3:运行并进入容器内部
- $docker run -it --volumes-from data_container ubuntu /bin/bash
- //-it:交互式执行 /bin/bash
- //--volumes-from指定从另外一个容器挂载。
- //ubuntu:基础镜像
- //Step4:
- $ mount
- //Step5:进入容器该目录下
- $ cd var/mydata
- //Step6:创建一个文件
- $ vi volume.txt
- //Step7:退出
- exit
- //Step8:查看本机data目录下,已经有volume.txt文件
应用mount命令查看挂载目录
进入容器目录,添加一个文件,在本地文件目录/data下即可看到刚在容器中创建的目录。
好处:新创建的数据容器可以被多个其他容器挂载,达到数据共享.
13。Registry:镜像仓库(SAAS服务)
术语:
- //搜索镜像
- docker search 镜像名(eg:redis)
- //拉取镜像
- docker pull XXX
- //推送镜像到远端仓库
- docker push XXX //之前需要$ docker login
国内一些仓库:daocloud/时速云/aliyun
14。docker-compose:多容器app
【1】安装docker-compose
【2】实战
Mac安装:
https://docs.docker.com/docker-for-mac/edge-release-notes/#docker-community-edition-18050-ce-mac66-2018-05-17
001/Docker入门(Mooc)的更多相关文章
- 第三章 Docker 入门
第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...
- Docker入门教程(九)10个镜像相关的API
Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...
- Docker入门教程(八)Docker Remote API
Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...
- Docker入门教程(七)Docker API
Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...
- Docker入门教程(六)另外的15个Docker命令
Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...
- Docker入门教程(五)Docker安全
Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...
- Docker入门教程(四)Docker Registry
Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- Docker入门教程(二)命令
Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...
随机推荐
- Codeforces 961 容斥叉积判共线 树状数组递增思想题
A B C D 给你N个点 问你能不能有两条直线穿过这N个点 首先假设这N个点是可以被两条直线穿过的 所以两条直线就把这N个点划分成两个集合 我们取1 2 3三个点这样必定会有两个点在一个集合内 ch ...
- git log混乱之混乱操作
好几个分支 然后就混乱了 git log信息一坨屎 git 删除某次指定的提交 git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化. 以删除master分支为例 #新建一个备份的分支 ...
- python 删除/app/*/logs/*/*.logs指定多少天的文件
# encoding: utf-8 import sys import getopt import os import glob import time import datetime def rem ...
- 双层for循环用java中的stream流来实现
//双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomC ...
- Java 虚拟机JVM
定义 Java Virtual Machine:Java程序的运行环境(Javae二进制字节码的运行环境),相比C++有以下好处: 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界检查 多 ...
- python 使用wxpy实现获取微信好友列表 头像 群成员
最近在学习 python 突然想要试试能不能把微信里面的微信群和好友取出来 结果百度了一下 找到了 wxpy 这怎么能不试一下呢 用到 wxpy.threading.os.time 四个库 第一步 判 ...
- Python---进阶---常用模块os、jso
一.写一个6位随机验证码程序(使用 random模块),要求验证码中至少包含一个数字.一个小写字母.一个大写字母 import randomimport string #help(string) co ...
- 关于sword框架浏览器上方小图标的修改
sword框架默认有一个document.ejs文件,可以导出html模板(找了很久没找到index.html,哈哈哈),里面有一行代码 这个href就是代表着浏览器上方图标的路径. 在public文 ...
- css3圆角边框
圆角边框 一.border-radius属性简介 为元素添加圆角边框,可以对元素的四个角进行圆角设置(属性不具有继承性) 二.border-radius定义方法 border-radius属性有两 ...
- margin属性以及垂直外边距重叠问题
盒子的margin属性 盒子的外边距margin 指的是当前盒子与其他盒子之间的距离,环绕在盒子周围的空白区域,属于不可见的区域,,不会影响到可见框的大小,而是会影响到盒子的位置 ...