Docker基础入门(DockerFile入门)

Docker入门介绍

架构图

image-20210408144643074

将Image从Registry下载到DockerHost,DockerHost生成该镜像的Container,在Container中就可以正常使用了

Docker三要素:Image、Container、Docker Registry

Images

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

可以是一个软件(Tomcat)也可以是一个系统(centOS)

Container

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

Docker Registry

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 Red Hat 的 Quay.io;Google 的 Google Container RegistryKubernetes 的镜像使用的就是这个服务。

Docker什么作用

简化搭建环境,提高开发生命周期

大大简化运维工作量

微服务利器

与虚拟机的区别

轻量级的虚拟化技术,比传统的虚拟机性能更好。(主要是没有硬件的模拟)

  1. 架构上没有像Hypervisor - 虚拟机平台模拟硬件 VMWare
  2. 也没有Guest OS这样OS操作系统

image-20210408150810504

版本介绍

1.13之后此案有时间线作为版本号,分为CE和企业版EE

社区版又分stable和edge两种方式发布,每个季度更新stable版本

Docker安装

参考Docker官方安装文档

卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

使用yum安装

添加安装依赖包

$ sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2

添加yum软件源

$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

$ sudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
#     --add-repo \
#     https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker CE 请使用以下命令:

$ sudo yum-config-manager --enable docker-ce-test

如果需要每日构建版本的 Docker CE 请使用以下命令:

$ sudo yum-config-manager --enable docker-ce-nightly

安装 Docker CE

更新 yum 软件源缓存,并安装 docker-ce

$ sudo yum makecache fast
$ sudo yum install docker-ce

启动 Docker CE

$ sudo systemctl enable docker
$ sudo systemctl start docker

查看是否安装正确

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

image-20210408153528682

hello-world运行原理

docker run hello-world

在本地找不到image,向远程仓库查找hello-world,从远程仓库pull下来该镜像到本地,以该镜像为模板创建Container容器,生成实例运行。

配置镜像加速

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。

国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档。

本节我们以 网易云 镜像服务 https://hub-mirror.c.163.com 为例进行介绍。

Ubuntu 16.04+、Debian 8+、CentOS 7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

注意:如果您之前查看旧教程,修改了 docker.service 文件内容,请去掉您添加的内容(--registry-mirror=https://hub-mirror.c.163.com)。

Docker基本命令

启动Docker

systemctl start docker

停止Docker

systemctl stop docker

重启Docker

systemctl restart docker

开机启动Docker

systemctl enable docker

查看Docker帮助文档

docker --help

查看Docker帮助文档

docker info

查看Docker版本信息

docker version

Docker镜像命令

docker images 列出本机所有镜像

image-20210408155106311

  • TAG:版本信息
  • IMAGE ID:镜像ID
  • CREATED:创建时间
  • SIZE:大小

image-20210408155226341

docker search 搜索镜像

在远程仓库中搜索

image-20210408155416884

docker search tomcat

image-20210408155504498

docker pull 下载镜像

docker pull redis不指定版本就会下载最新版本

image-20210408155615671

docker pull centos:7

docker rmi 删除镜像

默认不加版本 就删除最新的

需要先将允许实例删除 -f(force)强制删除

docker imi 镜像名称:[TAG]

删除多个

docker imi -f 镜像1:[TAG] 镜像2:[TAG]

Docker 容器基本命令

创建并启动容器 run

docker run [OPTION] IMAGE[COMMAND][ARG...]

以交互模型运行并打开伪输入终端:

docker run -it --name MyCentOS-1 [镜像ID]

列出容器 ps

docker ps [OPTION]

image-20210408161014869

image-20210408161041861

退出容器 exit 或者 Ctrl + P + Q

进入容器 attach

docker attach ContainerID

启动容器 start

将停止的容器启动

docker start 容器ID

重启容器 restart

docker restart 容器ID

停止容器

docker stop 容器ID or 容器名

docker kill 容器ID or 容器名

删除容器

docker rm 容器ID or 名

强制删除

docker rm -f 容器ID1 容器ID2

删除所有

docker rm -f $(docker ps -qa)

Docker容器高级命令

启动类型

交互式启动 interactive

docker run -it --name 别名 镜像ID

守护式启动 daemon

docker -di --name 别名 镜像ID

启动指定交互终端

docker -it --name 别名 镜像ID /bin/bash

宿主机和容器之间文件拷贝

docker copy 源文件path 容器ID:目标文件path

docker copy 容器ID:源文件path 目标文件path

查看容器日志

docker logs

查看容器进程

docker top 容器ID

进入容器执行命令

docker exe -it 容器名称 或者 容器ID 执行命令

直接操作容器,执行完回到宿主机终端

一般用于启动容器里的应用。比如Tomcat niginx redis elasticsearch

端口映射

指定端口映射

docker run -it 8888:8080 镜像ID

随机端口映射

docker run -it -P tomcat

提交运行时的容器为镜像 commit

docker commit -a='作者' -m=’描述‘ 在运行的容器ID 新镜像名称

推送镜像到服务器

第一步 注册docker账号和密码

第二步 使用docker login登陆注册hub服务器

docker login

第三步 push推送

docker push java1234/tomcat7:1.1

推送镜像到阿里云hub服务器

使用方便,具体操作参考阿里云仓库指导

1. 进入阿里云镜像控制台

2. 创建命名空间,再创建镜像仓库

Docker目录容器挂载

简介

创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向自动同步。

作用

cp命令来做数据传递比较麻烦

通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求

实现

语法

docker run -it -v /宿主机:容器目录

多目录挂载

docker run -it -v /宿主机:容器目录 -v /宿主机目录2:/容器目录2 镜像名

挂载目录只读

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

Docker常用软件安装(后续更新)

简单web测试项目准备

在docker上安装tomcat7和配置

docker上安装mysql5.7和配置

运行项目

Docker迁移与备份

不使用公网存储,使用docker备份和迁移实现

备份镜像

docker save -o 备份镜像的名称 源镜像名称:tag版本

docker save -o 备份.tar redis:6

迁移加载

docker load -i input

docker load -i 备份.tar

DockerFile(后续更新)

简介

一系列命令和参数构成的脚本。Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

常用指令

FROM image_name:tag

定义了使用哪个基础镜像启动构建流程

maintainer

声明镜像维护者信息

LABEL key value

镜像描述元信息

ENV key value

设置环境变量

RUN command

构建容器时需要运行的命令

WORKDIR path_dir

设置终端默认登录进来的工作目录

EXPOSE port

当前容器对外暴露出的端口

ADD source_dir/file dest_dir/file

将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

VOLUME

创建一个可以从本地主机或者其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据

CMD

指定容器启动时候要运行的命令,假如多个CMD,最后一个生效

ENTRYPOINT

指定容器启动时要运行的命令

ONBUILD

当构建一个被继承的DockerFile时运行的命令

构建自定义centos

1. 编写DockerFile文件

FROM centos
MAINTAINER DengSchoo

LABEL name = "docker test" \
	build-time="2021"
ENV WORKPATH /home
WORKDIR $WORKPATH
RUN yum -y install net-tools
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash

2. 构建DockerFile文件

docker build -f myCentosDockerFile -t java123/mycentos:1.1

3. 运行

docker run -it 镜像ID

4. 查看镜像历史

docker history 镜像ID

构建自定义tomcat

1. 编写DockerFile文件

FROM centos
MAINTAINER DengSchoo

LABEL name = "docker test 2" \
	build-time="2021"
COPY copy.txt /home/copy.txt
ADD server.tar.gz /home
ADD apache-tomcat.gz /home

ENV WORKPATH /home/tomcat
WORKDIR $WORKPATH

EXPOSE 80
CMD /bin/bash

2. 构建

3. 运行

posted @ 2021-04-15 20:52  DengSchoo  阅读(170)  评论(0编辑  收藏  举报