D001.5 Docker入门(超级详细基础篇)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Docker的安装;Docker的简单操作;Docker数据卷与数据卷容器;Docker网络配置;Docker镜像的打包与载入

0x01 Docker的安装


0. 安装前提

a.kernel版本需大于3.10:

uname -r2018111317285460.png


b.能上外网

ping baidu.com

20181113173038239.png


c.本文是基于Centos7(6或ubuntu需改代码)


1. 安装Docker

a.切换成root用户权限(执行后输入自己的root密码):

su root

20181113173242319.png


b.安装软件包(目的是为了c.步):

yum install -y yum-utils device-mapper-persistent-data lvm2

20181113173434518.png


c.设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

201811131735530.png


d.安装指定版本(18.03.0.ce)

yum install -y docker-ce-18.03.0.ce

20181113174122730.png


2. 开启Docker服务并校验

a.开启服务

systemctl start docker.service

b.校验

docker version

20181113174214927.png


3. 配置自启动与国内镜像

a.设置Docker开机自启

systemctl enable docker.service

20181113174256540.png


b.配置国内镜像(使下载镜像更快)

vi /etc/docker/daemon.json

{
        "registry-mirrors": ["https://registry.docker-cn.com"]
}


c.重启Docker:

systemctl daemon-reload

systemctl restart docker


0x02 Docker的简单操作


1. 查找镜像

docker search mysql --filter=stars=100

“–filter=stars=100”:显示STARS数不小于100的镜像


2. 拉取与查看镜像

docker pull mysql:5.5

(docker pull mysql为拉取最新版本,5.5为指定版本)

docker images

2018111320032513.png


3. 运行镜像(会实例化出容器,并进入容器)

docker run -t -i mysql:5.5 /bin/bash

2018111320035520.png


4. 查看容器

a.查看运行中容器(执行后,切换终端查看)

su root

docker ps

20181113200647278.png


b.查看所有的容器

docker ps -a


5. 退出容器

exit

(ps:注意本实验多出省略此语句,请注意看截图判断是在容器内执行还是centos里执行)


6. 在原有镜像基础上创建新镜像

a.新拉取一个centos镜像,并添加新的内容

docker pull centos

docker run -t -i centos /bin/bash

touch shaonaiyi.txt

echo wechat:shaonaiyi888 >> shaonaiyi.txt

2018111320245871.png


b.复制主机名be6d5355a518,退出镜像

exit

c.生成新的镜像

docker commit -m "add wechat" -a "New Container" be6d5355a518 shaonaiyi/centos:v1.0.0

d.查看镜像

docker images

20181113203155794.png


7. 给镜像打标签

docker tag 75835a67d134 shaonaiyi/centos:v1.0.1

docker images

20181113203545302.png


0x03 Docker数据卷与数据卷容器


Docker的数据卷与Centos的mount类似,也跟电脑主机插CD光盘一样。

1. 数据卷(了解即可,可不操作)

a.创建名为app1的并带有数据卷mount的容器(-d指后台执行)

docker run -d -P -it --name app1 -v /mount centos /bin/bash

2018111320530763.png


b.进入app1容器并中查看数据卷为空

docker attach app1

20181113205502709.png


20181113205616808.png


c. 先退出容器,然后查看挂载情况(指定显示:Mounts)

exit

docker inspect -f {{.Mounts}} app1

20181113211359406.png


d.进入app1容器

docker start app1

docker attach app1

20181113213511806.png


e.然后切换终端2在默认的路径新建文件,切回终端1可查看到结果

touch

/var/lib/docker/volumes/8b4354560f97f16b2b875499dde06fd8bb874687ee95d049ed2bdaec17a9dfd3/_da

ta/hello

20181113213644852.png


20181113213735119.png


f.同样,在app1里面新建文件,在默认文件夹也可同步

g.查看并删除数据卷

docker volume ls

20181114102803225.png


docker rm -v移除容器的同时也会移除数据卷

docker run --rm在容器退出时清除数据

ps:只能删除没有容器挂载的Volume。如果有容器正在挂载的数据卷则不会被删除。


h.删除容器(自行创几个来删除或者知道就可以了,-f为强行删除,无论是否在运行都删除)

docker rm -f be6d5355a518

20181114103130482.png


docker volume prune 删除无用的数据卷(强行删除了一些容器后执行的结果)

20181114102857800.png


2. 数据卷(简易操作版)

a.创建指定文件夹(-p指创建多级文件夹,即/docker没有也会创建)

mkdir -p /docker/datas

touch /docker/datas/hello.txt

20181114104543229.png


b.执行容器,挂载/docker/datas到docker容器的/datas(发现centos的hello.txt文件可在容器中查看到)

docker run -d -P -it --name web1 -v /docker/datas:/datas centos /bin/bash

2018111410433314.png


c.设置容器中的/datas为只读模式(:ro)

docker run -d -P -it --name web1 -v /docker/datas:/datas:ro centos /bin/bash

d.亦可以挂载单个文件

docker run -d -P -it --name web2 -v ~/.bash_history:/.bash_history centos /bin/bash

docker attach web2

ll -a查看以“.”开头的隐藏文件

2018111411001037.png


3.数据卷容器

a.创建一个专门用于挂载的容器(挂载目录为/database,echo database表示创建后执行后的命令行)

docker run -d -v /database --name db centos echo database


b.查看执行后的结果

docker logs db

201811141128335.png


c.创建一个挂载容器db的/database的容器db1

docker run -d -it --volumes-from db --name db1 centos /bin/bash


d.检验是否挂载成功

docker attach db1

ls

20181114113041151.png


0x04 Docker网络配置


0. 开启Docker的端口转发

a.解决Ipv4警告而已,可不操作,直接执行下面1.先

echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf

more /usr/lib/sysctl.d/00-system.conf

b.执行完发现/usr/lib/sysctl.d/00-system.conf里面多了net.ipv4.ip_forward=1,然后重启网络:

systemctl restart network && systemctl restart docker

如不执行,在运行下面语句时会有警告:

20181114194832102.png


1. 绑定centos端口与容器的端口

a.运行一个容器(-p 5000:5000 可替换成-P,则随机分配端口)

docker run -d -p 5000:5000 training/webapp python app.py

20181114195316551.png


b.查看运行中容器的端口映射情况

docker ps

20181114195421800.png


c.退出容器,然后在centos查看情况(说明绑定成功)

curl 127.0.0.1:5000

20181114201641109.png


d.绑定指定ip端口则在前面加指定ip(127.0.0.1可换成其他ip地址)

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py


e.绑定指定ip随机的端口(127.0.0.1可换成其他ip地址)

docker run -d -p 127.0.0.1::5000 training/webapp python app.py


f.绑定指定多端口映射(执行后会用c.方式访问发现都可以查看)

docker run -d -p 5010:5000 -p 5020:5000 training/webapp python app.py


g.还可以指定通信协议(/udp或/tcp)

docker run -d -p 5030:5000/udp training/webapp python app.py


h.查看端口映射(容器的端口或者NAMES都可以查看)

docker ps

docker port jolly_fermat

20181114201741761.png


i.查看详情(看到很多信息,可以跟0x03的c.的语句做对比)

docker inspect jolly_fermat

20181114202033856.png


2. 容器互联(子容器连接父容器)

a.创建一个db容器

docker run -it -d --name net0 centos

b.查看webapp1容器的环境变量(db:db<=>容器名:容器别名)

docker run -it --name webapp1 --link net0:net0 centos /bin/bash

c.执行查看/etc/hosts,发现也加上了映射

cat /etc/hosts

2018111421054641.png


d.查看发现webapp1能ping通net0容器

ping net0

20181114210617530.png


0x05 Docker镜像的打包与载入


0. 查看镜像

a.记住REPOSITORY

docker images


1. 打包

a.sny_centos.tar.gz为打包后的名字,shaonaiyi/centos为REPOSITORY

docker save -o sny_centos.tar.gz shaonaiyi/centos

20181115130552929.png


2. 载入

a.执行ll,可查看到本地多了sny_centos.tar.gz文件

b.执行后,发现导入了两个镜像

docker load --input sny_centos.tar.gz

20181115130645713.png


3. 打包单个镜像

a.添加上TAG即可

docker save -o sny_centos.tar.gz shaonaiyi/centos:v1.0.1

20181115130901388.png


4. 删除镜像

a.-f指强制删除,后面接IMAGE_ID,此处为删除我的mysql

docker rmi -f d27424d4dcd4

20181115131244493.png


5. 导入容器快照

a.下载或者拿到别人的镜像,此处使用自己的镜像,体现不出大小

cat sny_centos.tar.gz | docker import - sny_centos:v1.0.2

20181115131422117.png


6.导入镜像与导入容器快照的区别

a.容器快照可以重新定义名称

b.容器快照不保存元数据和历史数据,所以体积更小


0xFF 总结


  1. 像类比面向对象语言里面的类,容器类比类实例化出来的对象。
  2. 具体操作实验与解析自行搜寻资料了解
  3. 容器互联部分有一些省略,后期补上或者自己搜资料了解
  4. 打包与载入镜像章节,在自己主机可能体现不出来,拿到我提供的镜像后可实际操作一遍
  5. 常用命令扩展

Centos操作:

yum list docker-ce --showduplicates | sort -r 查看yum里docker的版本

yum install -y docker-ce安装最新版本的docker


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 虚拟化 数据中心
|
10天前
|
Shell iOS开发 Docker
|
17天前
|
Ubuntu 应用服务中间件 Shell
Docker入门
Docker入门
34 0
|
17天前
|
存储 Ubuntu Linux
Docker 从入门到实践:Docker介绍
Docker 从入门到实践:Docker介绍
|
17天前
|
应用服务中间件 持续交付 nginx
【Docker专栏】Docker入门指南:快速构建你的第一个容器
【5月更文挑战第7天】Docker 入门指南:容器化应用利器。了解 Docker 核心概念——镜像、容器和仓库。安装 Docker 后,运行官方 `hello-world` 验证安装,再尝试运行 `nginx` Web 服务器。通过端口映射访问容器内服务,学习管理容器命令。创建自定义镜像,编写 Dockerfile,实现 Python Web 应用容器化。Docker 助力高效开发与运维,探索更多自动化部署与微服务场景。
【Docker专栏】Docker入门指南:快速构建你的第一个容器
|
17天前
|
安全 Linux 数据库
Docker 入门详解
通过遵循这些步骤,你将能够快速入门 Docker 并开始探索容器化的世界,关注 V 哥,技术之路一起成长。
|
17天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
46 0
|
17天前
|
Linux 虚拟化 Docker
docker入门
docker入门
26 2
|
17天前
|
存储 运维 Docker
Docker从入门到精通:Docker 容器数据卷详解
Docker 数据卷是持久化容器数据的关键机制,允许跨容器或主机共享,即使容器删除数据仍保留。创建数据卷可通过命令行或容器启动时指定,挂载到容器目录以读写。使用 `docker volume` 命令可管理数据卷,适用于持久化存储、数据共享及备份场景。了解和善用数据卷能优化 Docker 应用程序的运维。
30 0
|
17天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
89 0