第一节:docker简介、下载和配置镜像加速器、以及镜像和容器的使用
一. docker简介
1. docker背景
我们在实际开发中,会接触到多个环境,比如:开发环境、测试环境、生产环境。经常会出现程序员在本机上运行好用的代码,迁移到测试环境中不好用了; 测试环境校验没问题的程序发布到生产环境中又出错了,然后开发、测试、运维各方人员开始扯皮,干架,出现这种情况,很大的一个原因是不同环境下所安装的Runtime时版本不同,比如开发环境中安装的是 .Net Core 3.1 ,而测试环境中安装的是.Net Core 2.2 ; 再比如测试环境中安装的是JDK8,生产环境中安装的是JDK7,就会产生“水土不服”的问题,从而报错。
docker的诞生就是为了解决这种软件跨环境迁移而出现的水土不服的问题。将发布包和运行环境一起打包在一个容器中进行迁移,就解决上述问题。
2. docker相关概念
Docker 是一个开源的应用容器引擎,诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
容器是完全使用沙箱机制,相互隔离,容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
3. 镜像、容器、仓库
(1). 镜像(Image):就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
就像软件安装包。我们可以把镜像拉(pull)下来,增加我们的更改,然后发布(push)成新的镜像,别人也可以下载我们发布的镜像,然后继续更改,继续发布;
(2). 容器(Container):镜像安装后运行的实例;同一个镜像可以在同一台服务器上安装成多个容器,同一个镜像可以同时装在多个不同的服务器上
PS:镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
(3). 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像,有公有仓库和私有仓库之分。常见的docker的官方仓库、阿里云、腾讯云等等。
4. 相关地址
docker官网:https://www.docker.com/
镜像官方地址:https://hub.docker.com/ (可以去搜索各种镜像,查询镜像的版本号等)
二. 下载和配置镜像加速器
1. docker的安装
(1). yum 包更新到最新 (可省略这一步!!更新比较慢)
【sudo yum update】
(2). 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
【sudo yum install -y yum-utils device-mapper-persistent-data lvm2】
(3). 设置yum源
【sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo】
(4). 安装docker,出现输入的界面都按 y (在指令中加入 -y的话,一路安装不需要确认了)
下载最新版本:【sudo yum install -y docker-ce docker-ce-cli containerd.io】
或 【sudo yum install -y docker-ce】 这里发现我只安装docker-ce的时候,docker-ce-cli 和 containerd.io这两个工具也都给安装了,所以这两个指令等效
eg:失败截图(或者安装完以后无法启动,建议先安装containerd.io ,再安装 docker-ce ,docker-ce-cli ,详见下面)
根据提示执行命令: 【sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest】 或【sudo yum install -y docker-ce docker-ce-cli containerd.io --skip-broken】 完成下载 (下载比较慢,大约10min)
下载中截图:
在centos8系统中,上述步骤可能还不行,需要先单独安装一下containerd.io,
sudo yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
然后再重新执行一下docker的安装指令 【sudo yum install -y docker-ce docker-ce-cli】
(5). 查看docker版本,验证是否验证成功
【docker -v】
2. docker相关指令
(1). 启动docker:【sudo systemctl start docker】
(2). 停止docker:【sudo systemctl stop docker】
(3). 重启docker:【sudo systemctl restart docker】
(4). 查看docker服务状态:【sudo systemctl status docker】
(5). 设置开机启动docker:【sudo systemctl enable docker】
3. 配置镜像加速器
(1). 默认镜像的下载地址是:https://hub.docker.com/ 国外的,下载慢的要死,我们可以把它配置成国内的镜像,常见的有以下这几种:
USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
阿里云:注册登录后查看 (推荐!!!)
网易云:注册登录后查看
腾讯云:注册登录后查看
(2) . 配置阿里云的镜像加速器(都类似)
A. 登录阿里云--------进入控制台------搜索容器镜像服务并进入-------选择镜像加速器--------复制地址
B. 进入Linux系统
(1). 打开配置文件: 【vi /etc/docker/daemon.json】 默认是空的
(2). 复制下面代码到上面的文件里,进行保存
{ "registry-mirrors": ["https://阿里云复制的地址"] }
(3). 执行相关重启命令:【sudo systemctl daemon-reload 】和【sudo systemctl restart docker】
简单方法(推荐)
直接去阿里云那复制整段代码,copy到Linux系统,敲回车一步搞定。
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://ijmr3it2.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
三. 镜像和容器的使用
1. 镜像
A 相关指令:
(0). 构建镜像:docker build -t <imageName>:版本号 . (注:最后是一个空格和一个点, 版本号可以省略)
ps:如果Dockerfile文件不在当前目录,或者重命名了,需要通过 -f参数指定路径。 eg:【docker build -f ./ypfcentos_Dockerfile -t ypfcentos:1.0 . 】
(1). 搜索镜像: docker search imageName
(2).下载镜像:docker pull <imageName>
下载指定版本号的镜像:docker pull imageName:版本号
PS:镜像可以去这个网站上找:https://hub.docker.com ,版本号也上这找。
(3). 查看所有映像:docker images 【等价 docker image ls】
(4). 查看所有镜像ID:docker images –q
(5). 删除指定镜像:docker rmi <imageid 或 imageName>
(6). 删除全部镜像:docker rmi $(docker images -q)
(7). 删无标签镜像:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
B. 案例:
(1). 删除系统中nginx镜像 和 redis 镜像(分别通过name 和 ID)
(2). 下载5.7版本的MySql镜像
先去仓库中查询一下有没有5.7这个版本,经查询是有的, 然后进行下载即可。
2. 容器
A. 相关指令:
(1). 运行容器:docker run 各种参数 <imageName>
PS:当本机一个镜像存在多个版本的时候需要加上版本号: docker run 各种参数 <imageName>:版本号
参数说明:
--name:指定容器名称 eg: --name=ypf 或者 --name ypf 都行
-i:保持容器运行。通常与 -t 或 -d同时使用。
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用,容器创建后自动进入容器中,退出容器后,容器自动关闭。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
-p:指定端口映射 eg: -p 5001:80 (其中5001表示docker主机《即linux系统》对外开放的端口,80表示容器对外开放的端口-dockerFile中)
-P:暴露所有端口
常用组合:
【docker run -it --name=xxx <imageName>】: 以交互式创建容器,容器创建后自动进入容器中,退出容器后,容器自动关闭。
【docker run -id --name xxx <imageName>:7】:以守护时创建容器,并且制定使用镜像的版本为7, i可以省略
【docker run --name xxx -id -p 5001:80 <imageName>】: 以守护时创建容器,并做端口映射,linux端口5001,容器端口为80
(2). 查看运行容器:docker ps 【等价 docker container ls】
查看所有容器:docker ps -a
(3). 进入容器内部:docker exec -it <containerId> /bin/bash (可省略bin,简介写法 【docker exec -it <containerId> bash】)
注:这里不能 -id
(4). 退出当前容器:exit
(5). 启动一个容器:docker start <containerId 或 containerName>
(6). 停止一个容器:docker stop $(docker ps -q)
停止一个容器:docker stop $(docker ps -q)
(7). 删除单个容器:docker rm <containerId 或 containerName> (加个 -f 可以强制删除启动的容器)
删除所有容器:docker rm $(docker ps -aq)
(8). 查看容器信息:docker inspect <containerName>
(9). 查看容器日志:
docker logs [OPTIONS] 容器name/ID Options: --details 显示更多的信息 -f, --follow 跟踪实时日志 --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all -t, --timestamps 显示时间戳 --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
假设容器的名字为test1
A. 查看最近20分钟内的所有日志
【docker logs --since 20m test1】
B. 查看最近20分钟内的最新的100条日志
【docker logs --since 20m --tail 100 test1】
C. 查看最近20分钟内的最新的100条日志,并实时监控后续日志
【docker logs -f --since 20m --tail 100 test1】
D. 查询某个时间段内的日志
【docker logs --since="2020-09-17" test1】 查询20200917后的所有日志
【docker logs --since="2020-09-17" --until="2020-09-18" test1】查询20200917-20200918之间的日志
B. 案例:
(1). 用交互式的方式创建一个名为myCentos1的容器,查看是否直接进入容器,退出后容器是否关闭。
(2). 指定端口的用法
【docker run -id --name=ypfwebapicontainer1 -p 8000:9000 ypfwebapi1】
(3). 随机所有端口的用法
【docker run -id --name=test1 -P ypfwebapi1】
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。