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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
95 2
|
4天前
|
Ubuntu 应用服务中间件 nginx
docker入门-快速学会docker
本文介绍了Docker的基本概念,包括镜像、容器、tar文件、Dockerfile和仓库,并通过实际操作演示了如何使用Docker。从拉取Nginx镜像、运行容器、修改容器内容、保存容器为新镜像,到使用Dockerfile构建自定义镜像,最后讲解了如何保存和恢复镜像。文中还推荐了一个在线实践平台Play with Docker,方便读者快速上手Docker。
28 4
docker入门-快速学会docker
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
1月前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
1月前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
81 2
|
1月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
54 3
|
1月前
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
54 0
|
2月前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
55 2
|
1月前
|
Kubernetes Docker 容器
掌握Docker容器化技术:从入门到实战
掌握Docker容器化技术:从入门到实战
27 0
|
2月前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
下一篇
DataWorks