手记

Docker的安装与日常使用

前言

  我的程序在本地运行没问题啊!我觉得程序员应该都说过这句话,自己电脑上的环境与别的电脑不一样,导致程序运行不了;如果每次装系统都需要去配环境而浪费自己的时间等问题,如果你有这些的困扰,那么来和我一起学习Docker吧!

了解Docker
Docker思想
  • 集装箱
  • 标准化(运输方式、存储方式、API接口)
Docker解决了什么问题
  1. 解决了系统运行环境不一致所带来的问题
  2. 应用之间不会互相影响内存
  3. 让快速扩展,弹性伸缩变得十分简单
走近Docker
Docker核心技术


三个名词,镜像(集装箱)、仓库(超级码头)、容器(运行程序的地方),使用Docker运行一个程序的过程:<font color="red">去仓库把镜像拉到本地,再用一条命令运行起来变成容器</font>
核心概念:

  • Build:构建的意思,即构建镜像
  • Ship:运输的意思,即运输镜像,从仓库或我们的主机进行运输
  • Run:运行起来的镜像即容器
Docker镜像

构建镜像的目的?为了在其他机器上,或者其它环境上运行我的应用程序。
即image,镜像就是一系列文件,它可以是应用程序的文件,也可以是应用环境的文件,采用的是linux的联合文件系统
镜像的存储格式

Docker容器

容器是什么?容器的本质就是一个进程便于理解,可以想象为一个虚拟机,但又区别与虚拟机。区别:他的文件系统是分层的,而且最下边的n层都是只读的,只有最上面一层是可读可写的(在系统运行时写入日志,写入文件,修改系统配置文件等)。如果我们的应用要对镜像的一个文件进行写入操作怎么办?这时它会在镜像这一层找到那个要修改的文件,拷贝到最上面那层,再进行修改,修改后,应用运行时会从最上面的一层进行查找,如果没有,再接着往下面一层寻找。

结论:由于镜像这一层文件是只读的,不能修改,镜像上面那层(即容器)是可写的,因此同一个镜像可以生成不同的容器独立运行,互不干扰。

Docker仓库

构建仓库的目的?为了把我的镜像传输到其它的机器上(先把自己的镜像上传到Docker仓库,再在另一台机器上把镜像拷下来)

  • docker官方仓库地址:hub.docker.com
  • 163仓库地址:c.163.com
Docker安装

Widows

Win10(安装如下)
Win10之外

下载后直接进行安装,安装后生成四个文件,点击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使用

一些常用命令:

  1. 创建docker镜像docker pull[OPTIONS] NAME[:TAG]

    • NAME 是拉取镜像的名称,必须写
    • TAG 是拉取镜像的版本,可选择,不写默认最新版本
    • OPTION 是拉取的参数,一般用不到
  2. 查看本机有哪些镜像docker images[[OPTIONS] ][REPOSITORY[:TAG]]

    • REPOSITORY查看指定的镜像,用的比较少
  3. docker run[OPTIONS]IMAGE[:TAG][COMMAND][ARG]

  4. 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仓库拉取回本地,在运行这个镜像变成一个容器

运行Nginx
//进入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>

5人推荐
随时随地看视频
慕课网APP