Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

docker基础

1、安装以及配置

1.1、docker的基本组成

This is a picture without description

  1. 镜像

镜像就是一个只读的模板,可以通过这个模板创建容器服务,一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。

  1. 容器
  • Docker利用容器技术,独立运行的一个或一组应用。容器是用镜像创建的运行实例。
  • 它可以被启用,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
  • 可以把容器看作是一个简易版的Linux系统(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
  • 容器的定义和镜像几乎一摸一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
  1. 仓库
  • 仓库是集中存放镜像文件的场所。
  • 仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
  • 仓库分为公开仓库(public)和私有仓库(private)两种形式
  • 最大的开放仓库是国外的 Docker Hub,存放了数量庞大的镜像供用户下载。
  • 国内的公开仓库包括阿里云,网易云都有容器服务器(需要配置镜像加速)等

1.2、准备安装环境

需要准备一台系统为Cent OS 7&8的服务器,这里我所使用的是阿里云的服务器。

1.3、安装

  1. 卸载旧版本

直接通过yum来安装 docker 服务。
如果在系统之中有旧版本的 docker ,需要首先卸载旧的版本

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
  1. 安装新版本
    1
    sudo yum install -y yum-utils
  2. 设置镜像地址
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 默认是国外的
    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

    # 换成阿里云镜像地址
    sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3. 安装最新版Docker Engine和容器
    1
    2
    # docker-ce社区版(docker-ee企业版)
    sudo yum install docker-ce docker-ce-cli containerd.io

1.4、安装完成后启动

1
sudo systemctl start docker

查看是否安装成功并启动

1
docker version

This is a picture without description

1.5、测试

运行hello world测试

1
sudo docker run hello-world

This is a picture without description

查看刚才运行的镜像

1
docker images

This is a picture without description

2、docker常用命令

3、实战部署

3.1、部署Nginx

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 搜索镜像
docker search nginx
# 2. 下载镜像
docker pull nginx
# 3. 查看镜像是否下载成功
docker images
# 4. 启动容器(-d:后台运行 --name:容器名 -p:暴露端口 宿主机端口3344:容器端口80)
docker run -d --name nginx01 -p 3344:80 nginx
# 5. 查看容器是否启动
docker ps
# 6. 本机测试
curl localhost:3344

3.2、部署Tomcat

1
2
3
4
5
# 官方使用
# 之前我们都是后台启动,停止容器后,仍可以通过docker ps -a命令查到容器的使用记录
# --rm表示用完就删除容器及历史记录,通过命令查不到;
docker run -it --rm tomcat:9.0

3、容器数据卷

3.1、什么是容器数据卷

docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行。

而现在有这样一个问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除。比如,安装一个MySQL容器,在其中存储了大量数据,结果把容器删了数据也没了,就相当于删库跑路,这是不可能发生的

而为了解决这个问题,就有了 容器数据卷 的概念:Docker容器所产生的数据会自动同步到本地,这样子即使将容器删除了,数据依然还在;同时,同一份数据还可以在多个容器中进行共享。
类似于将容器的目录挂载到本地(本地指的是:服务器的本地)

3.2、使用容器数据卷

使用数据卷有两种方式,一种是通过命令行挂载的方式,一种是通过dockerfile的方式添加,首先进行第一种模式的介绍。

1
docker run -it -v 主机目录:容器内目录

举例:

1
docker run -it -v /home/test:/home centos /bin/bash

启动之后可以用docker inspect查看容器详细信息,可以看到挂载的信息。
其中-v表示在容器中创建一个数据卷,通过该命令,会在docker以及宿主中分别创建一个相同的目录,两个目录相互共享,里面的文件也是一样。

同时在创建容器数据卷的的时候还可以给它加上权限,如果我们想要给宿主机只能读取数据卷中的数据,但是不能修改,我们就可以通过以下的方式进行设置:

1
docker run -it -v /主机目录 : /容器内目录  :ro 镜像名

而一般情况下,只写很少使用,同样通过docker inspect可以查看权限。
下面我们介绍dockerfile的方式创建容器数据卷。

3.3、初识Dockerfile

DockerFile也就是用来创建docker镜像的构建文件,而dockerFile对于docker镜像而言就如同java中某个类的.class文件对应上该类的.java文件。

首先在linux服务器根目录上新建docker文件夹并建立DockerFile文件,使用volume命令(出于可移植可分享的的考虑,用以上 -v /宿主机绝对路径目录 : /容器内目录 的这种方式不能够直接在dockerFile中直接实现,因为宿主机目录是依赖于特定的宿主机的,并不能保证所有的宿主机都存在这样特定的目录)

首先我们编写一个dockerfile文件:

1
2
3
4
FROM  镜像名
VOLUME ["/生成的目录路径"] -- privileged=true
CMD echo "success build"
CMD /bin/bash

以上的文件脚本相当于命令行: docker run -it -v /主机目录 : /容器内目录

然后通过docker build编译运行该脚本文件:

1
docker build -f  /docker/DockerFile -t  命名空间/镜像名

执行后输入docker images就可以发现自己通过DockerFile所build的镜像,里面有挂载数据卷。