【容器】初识Docker

官网关于Docker的介绍: Docker overview

资料:
每天5分钟玩转容器技术
尚硅谷-docker快速入门基础

先看一下官网上关于Docker架构的图片
【容器】初识Docker_第1张图片

图(1)

Registry: 表示远程镜像仓库,如官方的镜像仓库或各个公司搭建的镜像仓库。里面存储的都是各种制作好的镜像(image)。
Client: 表示执行docker命令的终端
Docker_Host: 表示运行docker服务的宿主机
Docker_daemon: docker的守护进行,用于接收客户端发送的命令

客户端执行下载(pull)命令则会将仓库中指定的镜像(image)下载到本地docker服务中,运行(run)镜像(image)将生成一个容器。镜像与容器的关系可以理解为Java中的类与对象的关系。

【容器】初识Docker_第2张图片

图(2)
docker的镜像是由一层一层的文件构成的,如图(2)中自定义tomcat镜像构建,先添加类CentOs镜像,然后安装了Java环境,最后安装了tomcat环境。当运行容器时是在镜像之上添加了容器层,若需要修改镜像中的配置时则将镜像中的文件拷贝到容器层中然后在修改,故修改了容器A中的端口号为9090后,容器B中的端口号依然为8080。这样镜像中的文件对于不同的容器可以实现共享。

CentOs7安装Docker: 官网安装说明

 sudo yum install -y yum-utils
 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 sudo yum install docker-ce docker-ce-cli containerd.io
 sudo systemctl start docker
 sudo docker run hello-world

本地安装过程中遇到报错:Error response from daemon

[root@localhost local]# docker pull hello-world
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid

解决方式:

[root@localhost local]# yum install ntpdate
[root@localhost local]# ntpdate cn.pool.ntp.org

注:此处我用的是root用户登录的,故没有在命令前加sudo

由于docker官方的镜像仓库是在国外,故配置镜像加速器提高镜像下载速度:
配置文件路径: /etc/docker/deamon.json
文件内容如下

{
 "registry-mirrors": ["http://hub-mirror.c.163.com"],
 "insecure-registries": ["registry-1.docker.io"]
}

其中 http://hub-mirror.c.163.com 为网易云加速器,可更改为其它加速器

配置文件修改后须执行命令重新加载配置以使其生效:

Systemctl daemon-reload
Systemctl restart docker

至此docker安装完成

docker info  ## 查看docker信息
docker version  ##查看docker版本

Docker 命令
官网安装的最后一步是docker run hello-world,而我本地使用的是docker pull hello-world。这两者的区别是:docker pull 命令是从镜像仓库中下载指定的镜像文件(此处指hello-world镜像);docker run 命令则会先判断本地是否已存在指定镜像(此处指hello-world镜像),若不存在则先下载镜像在运行该镜像生成一个容器,否则直接运行该镜像生成一个容器。

docker images [options] 查看docker服务器上的镜像列表
-a 所有镜像
-q 只显示镜像ID

docker search 镜像名称 从镜像仓库中根据镜像名称搜素镜像,可模糊匹配
docker pull 镜像名称 从镜像仓库中根据镜像名称下载镜像
docker rmi 镜像名称或镜像ID 根据镜像名称或镜像ID从docker服务器上删除镜像

docker run [options] 镜像名称或镜像ID 运行指定的镜像
–name 指定容器的名称,若不指定则随机分配
-d 以后台方式运行并返回容器ID
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射, 格式为 宿主机端口号:容器端口号

docker ps [options] 查看容器列表
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。

docker stop 容器ID或容器名 停止容器
docker start 容器ID或容器名 启动已停止的容器
docker restart 容器ID或容器名 重启容器
docker kill 容器ID或容器名 强制停止容器
docker exec -it 容器ID或容器名 bashShell 进入正在运行的容器并以命令行交互

docker exec -it container_id /bin/bash

docker attach 容器ID或容器名 进入正在运行的容器并以命令行交互
注:attach 直接进入容器启动命令的终端,不会启动新的进程,exec 是在容器中打开新的终端,并且可以启动新的进程。本地尝试docker attach命令未成功
进入容器后可以通过ctrl+p+q(control+p+q)退出,此方式不会停止容器。使用exit命令退出容器则容器也将被停止。
docker rm 容器ID或容器名 删除已停止的容器,加上参数-f 可强制删除正在运行中的容器
docker cp 容器ID:容器内路径 目的主机路径 拷贝容器中的内容到宿主机上
docker logs [options] 容器ID或容器名 查看容器日志
-t 是加入时间戳
-f 跟随最新的日志打印
–tail 数字 显示最后多少条


数据卷 用于实现容器与宿主机、容器与容器间的数据共享

第一种直接使用命令
docker run -it -v 宿主机绝对路径:容器内部路径 镜像名或镜像ID

[root@localhost mydocker]# docker run -it -v /usr/local/mydocker/containerData:/usr/local/tomcat/containerData atguigu/tomcat:2.2

【容器】初识Docker_第3张图片
第二种利用dockerFile中的VOLUME 指令
【容器】初识Docker_第4张图片
生成镜像
docker build -f dockerFile文件路径 -t 镜像名 .
运行新镜像
【容器】初识Docker_第5张图片
通过此方式无法指定宿主机上的目录,使用命令查看默认的宿主机目录
docker inspect 容器ID或容器名称
【容器】初识Docker_第6张图片
在此基础上我们可以实现容器与容器之间的共享
docker run -it --volumes-from=父容器ID或父容器名 --name=当前容器名 镜像名或镜像ID

docker run -it --volumes-from=myCentOs_01 --name=myCentOs_02 90b1b41b9109

多个容器使用同一个镜像创建且该镜像的dockerFile中设置了VOLUME指令,容器之间使用–volumes-from指定关联
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止


创建镜像
1.使用commit命令在容器的基础上创建新镜像

docker commit -a=作者信息 -m=概要 容器ID(可以是停止状态) 新镜像名称

2.使用dockerFile创建新镜像
每条保留字指令都必须大写且后面必须要跟至少一个参数
指令按照从上到下顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交

##指令
FROM  镜像  ##指定新镜像是基于哪个镜像创建的,例如 FROM redis 指基于redis镜像创建新镜像 FROM scratch 基于空镜像创建新镜像
MAINTAINER authorInfo ##指定作者信息
RUN command ##新镜像创建时需要执行的命令
WORKDIR dir ##指定在创建容器后,终端默认登录后的目录
ENV param ##设置变量
EXPOSE port ##设置新镜像暴露的端口 
ADD 宿主机目录 镜像中的目录 ##拷贝并解压文件
COPY 宿主机目录 镜像中的目录 ##拷贝文件 
VOLUME [路径,路径] ##指定数据卷目录
CMD command ##指定容器启动时要运行的命令,可以有多个,只有最后一个有效,并会被docker run后的参数替换
ENTRYPOINT command ##指定容器启动时要运行的命令,只有一个,不回被docker run后的参数替换
ONBUILD command ##类似钩子,父镜像被继承后将触发

【容器】初识Docker_第7张图片


实际项目中会遇到需要将镜像打包发到现场,然后导入

## 导出镜像
docker save 镜像名/镜像id | gzip > xxx.tar.gz

## 导入镜像
docker load < xxx.tar.gz

win10下docker更改pull镜像的默认路径

你可能感兴趣的:(水滴石穿,docker,容器,运维)