我的程序在本地运行没问题啊!我觉得程序员应该都说过这句话,自己电脑上的环境与别的电脑不一样,导致程序运行不了;如果每次装系统都需要去配环境而浪费自己的时间等问题,如果你有这些的困扰,那么来和我一起学习Docker吧!
了解Docker Docker思想- 集装箱
- 标准化(运输方式、存储方式、API接口)
- 解决了系统运行环境不一致所带来的问题
- 应用之间不会互相影响内存
- 让快速扩展,弹性伸缩变得十分简单
三个名词,镜像(集装箱)、仓库(超级码头)、容器(运行程序的地方),使用Docker运行一个程序的过程:<font color="red">去仓库把镜像拉到本地,再用一条命令运行起来变成容器</font>
核心概念:
- Build:构建的意思,即构建镜像
- Ship:运输的意思,即运输镜像,从仓库或我们的主机进行运输
- Run:运行起来的镜像即容器
构建镜像的目的?为了在其他机器上,或者其它环境上运行我的应用程序。
即image,镜像就是一系列文件,它可以是应用程序的文件,也可以是应用环境的文件,采用的是linux的联合文件系统
镜像的存储格式
容器是什么?容器的本质就是一个进程便于理解,可以想象为一个虚拟机,但又区别与虚拟机。区别:他的文件系统是分层的,而且最下边的n层都是只读的,只有最上面一层是可读可写的(在系统运行时写入日志,写入文件,修改系统配置文件等)。如果我们的应用要对镜像的一个文件进行写入操作怎么办?这时它会在镜像这一层找到那个要修改的文件,拷贝到最上面那层,再进行修改,修改后,应用运行时会从最上面的一层进行查找,如果没有,再接着往下面一层寻找。
结论:由于镜像这一层文件是只读的,不能修改,镜像上面那层(即容器)是可写的,因此同一个镜像可以生成不同的容器独立运行,互不干扰。
Docker仓库构建仓库的目的?为了把我的镜像传输到其它的机器上(先把自己的镜像上传到Docker仓库,再在另一台机器上把镜像拷下来)
- docker官方仓库地址:hub.docker.com
- 163仓库地址:c.163.com
Widows
下载后直接进行安装,安装后生成四个文件,点击Docker Quickstart Terminal进行运行
第一次运行过程会比较慢,因为会从github上下载一个boot2docker.iso文件,可以先下载下来,放入c盘C:\Users\Administrator.docker\machine\cache目录下,在进行运行.
Linux
[Redhat&CentOs]()参考教程
系统要求:64-bit OS and 内核version 3.10
[Ubuntu]()
系统要求:64-bit OS and 内核version 3.10
Ubuntu安装命令如下:
//查看系统内核是否符合要求
$ uname -r
$ su
# apt-get update 保证系统是最新版本
//使用系统自带的docker安装包进行安装,可能不是最新版本
# apt-get install -y docker.io
//使用最新的docker安装包进行安装
# curl -s https://get.docker.com | sh
//启动docker服务
# service docker start
//检查
# docker version
Docker使用
一些常用命令:
-
创建docker镜像docker pull[OPTIONS] NAME[:TAG]
- NAME 是拉取镜像的名称,必须写
- TAG 是拉取镜像的版本,可选择,不写默认最新版本
- OPTION 是拉取的参数,一般用不到
-
查看本机有哪些镜像docker images[[OPTIONS] ][REPOSITORY[:TAG]]
- REPOSITORY查看指定的镜像,用的比较少
-
docker run[OPTIONS]IMAGE[:TAG][COMMAND][ARG]
- docker --help
使用示例
//查看本机镜像列表
docker images
//拉取镜像,不填写地址默认在hub.docker.com上找
docker pull hello-world
//运行,从镜像创建容器
docker run hello-world
如图:当执行docker pull hello-world 时,docker客户端会向docker daemon 发送一个docker pull命令,告诉docker daemon 要拉取一个hello-world镜像,docker daemon 会先在本地检查是否有此镜像,如果没有再从目标服务器拉取到本地;当执行docker run 时,过程一样,先向docker daemon 发送命令,docker daemon 检查本地是否存在,如果不存在,再从远程docker仓库拉取回本地,在运行这个镜像变成一个容器
//进入docker仓库网站查询nginx镜像,复制pull地址
docker pull ....
//查看目前正在运行的容器
docker ps
//后台运行
docker -d ...
//进入容器内部-i保证输入有效-t分配一个伪终端进行输入命令
docker exec -it 容器id(不用写全) bash
//已经进入容器内部,相当于一台linux,
//查询nginx在什么位置
which nginx
//查询当前服务的进程
ps -ef
//退出容器
exit
Docker网络
网络类型
- Bridge
- Host
- None
端口映射
可以将主机上的端口映射到容器中的端口,当访问主机上的端口的时候就相当于访问docker容器中的端口
制作自己的镜像//停止容器运行 docker stop 容器名称id //查看运行帮助,找端口映射参数 docker run --help //运行并映射指定端口 docker run -d -p 8080(主机端口):80(容器端口) 镜像名字id //-P 开放所有端口映射到一个随机端口中 //查看进程 docker ps
//书写Dockerfile
//先从仓库中下载要继承的基础镜像文件
//创建文件
vim Dockerfile
//继承一个基础镜像
from hub.c.163.com/library/tomcat
//镜像作者的信息
MAINTAINER zhaoshuaifei sfdotz@gmail.com
//把web应用放入
COPY 本地war包 tomcat路径的webapp下
//点代表Dockerfile文件在当前目录下
docker build -t (镜像名字) .
//重启服务器
docker restart 镜像名称
结束
看完本文你对docker只是有了初步的认识和使用,能够满足自己日常使用,docker还有更加深入的知识,如果你感兴趣,可以去官网进行研究。
本文参考慕课网视频
结语<h2><center>世界在变化,技术在革新,如果你不想被淘汰,那么怎能停止学习的步伐?</h2>