Docker 的基本管理

1.Docker的概述

如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时 间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。

Docker 的三大核心概念------镜像,容器,仓库。

1.1Docker的优势

Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。

Docker 之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 1.2 是 Docker 与传统虚拟机架构。

2.Docker 镜像

Docker(Docker)镜像除了是Docker的核心技术之外,也是应用发布的标准格式。个完整的Docker (Docker) 镜像可以支撑一个Docker (Docker)容器的运行,在DockerDocker)的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务。

2.1Docker镜像结构

镜像不是一个单一的文件,而是有多层构成。可以通过 docker history 命令查看镜像中各层内容及大小,每层对应着 Dockerfile 中的一条指令。Docker 镜像默认存储在var/ib/docker/<storage-driver>目录中。容器其实是在镜像的最上面加了一层读写层, 在运行容器里做的任何文件改动,都会写到这个读写层。如果删除了容器,也就删除了其最上面的读写层,文件改动也就丢失了。Docker 使用存储驱动管理镜像每层内容及可读写层的容器层。

Docker 镜像是分层的,下面这些知识点非常重要。

(1) Dockerfile 中的每个指令都会创建一个新的镜像层;

(2) 镜像层将被缓存和复用:

  1. 当Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效;

(4) 某一层的镜像缓存失效,它之后的镜像层缓存都会失效:

(5)镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在 Docker 容器中不可见了。

2.2Dockerfile介绍

Dockerfile是Docker的程序解释脚本,dockerfile由多条命令组成每条指令对应Linux 下面的一条命令。Docker 程序将这些Dockerfile 指令翻译成真正的Linux 命令。Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,类似于Makefile。Docker 程序将读取 Dockerfile,根据指令生成定制的镜像。相比镜像这种黑盒子Dockerfile 这种显而易见的脚本更容易被使用者接受,它明确的表明镜像是怎么产生的。有了Dockerfile,当有定制额外的需求时,只需在 Dockerfile 上添加或者修改指令, 重新生成镜像。

2.2.1 镜像

镜像是创建容器的基础,类似于虚拟机的快照,面向dcoker容器引擎的只读模板。

例如:一个镜像可以是完整的centos操作系统,称为Centos镜像;也可以是安装Mysql应用程序,称为MYSQL镜像。

2.2.2容器

容器是镜像创建的运行的实例,可以被启动,停止,和删除。每个容器都是相互隔离的,互不可见,Docker利用容器运行和隔离应用。

2.2.3 仓库

仓库用来集中保存镜像,创建镜像之后,可以使用push上传到共有仓库(Public)和私有仓库(private)。另外机器上使用镜像时,可以直接从仓库获取。

仓库注册服务器 (Registry) 是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某类镜像,并且使用不同的标签 (tag) 来区分它们。目前最大的公共仓库是 docker Hub,存放了数量庞大的镜像供用户下载使用。

3.实验部署

1.docker安装

使用ali仓库

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum clean all

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

vim /etc/sysconf/selinux

使用aliyun镜像站安装

step 1: 安装必要的一些系统工具

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

Step 2: 添加软件源信息

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3

sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

Step 4: 更新并安装Docker-CE

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

添加国内镜像站

mkdir /etc/docker/

/etc/docker/daemon.json

{

"exec-opts":["native.cgroupdriver=systemd"],

"registry-mirrors":["https://cf-workers-docker-io-8jv.pages.dev"],

"insecure-registries":["192.168.10.106"]

}

开启Docker服务

systemctl restart docker

systemctl enable docker

docker version

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

sysctl -p (立即生效+检测语法)

2.Docker 镜像的制作

[root@localhost ~]# docker search lamp 搜索镜像

[root@localhost ~]# docker pull mattrayner/lamp 获取镜像

[root@localhost ~]# docker images 查看镜像

[root@localhost ~]# docker pull centos:7

[root@localhost ~]# docker pull hub.atomgit.com/amd64/nginx:1.25.2-perl

https://atomhub.openatom.cn (浏览器搜索国内网站镜像,amd-nginx)

更改镜像名称

[root@localhost ~]# docker tag hub.atomgit.com/amd64/nginx:1.25.2-perl nginx:v1.23
备注:
hub.atomgit.com/amd64/nginx:1.25.2-perl 旧名称:旧版本
nginx:v1.23 新名称:新版本

删除镜像

[root@localhost ~]# docker rmi nginx:v1.23

导出镜像

[root@localhost ~]# dockr save -o centos7 centos:7

centos7 导出镜像的文件名称

centos:7 镜像名称

导入镜像

[root@localhost ~]# docker load < centos7

创建容器

[root@localhost ~]# docker create -it centos:7

注意:
-i:让容器的输入保持打开状态
-t:让Docker分配一个伪终端
-d:以守护进程的方式运行该容器

[root@localhost ~]# docker start d3 启动 d3是ID号

容器导出

[root@localhost ~]# docker export 6a > centos001

容器导入生成镜像

[root@localhost ~]# docker import centos001 centos02:test
备注:
centos001 容器名称
centos02:test 镜像名称:标签

3.端口映射

(1)随机映射端口

[root@consul ~]# docker run -d -P httpd

-d 守护进程

[root@consul ~]# docker ps -a

(2)指定映射端口

[root@consul ~]# docker run -d -p 49280:80 httpd

[root@ consul ~]# docker ps -a

备注:

49280:是映射到外部的端口,这个端口范围通常是从32768到61000

80:是容器的端口

4.容器互联

(1)创建源容器

[root@consul ~]# docker run -dit --name web01 centos:7

(2)创建接收容器

[root@consul ~]# docker run -dit --name web02 --link web01:web01 centos:7

备注:

--link web1:web1

冒号前的web1,是第一个需要链接的容器的名字

冒号后的web1,是链接到第二个容器后,为第一个容器起的别名

(3)测试容器互联

[root@consul ~]# docker exec -it web02 /bin/bash

[root@71591dd4a58e /]# cat /etc/hosts

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.17.0.2 web01 36411a49ce54

172.17.0.3 71591dd4a58e

[root@71591dd4a58e /]# ping web01

5.docker的数据管理

(1)创建数据卷

[root@localhost ~]# docker run -dit -v /data1 -v /data2 --name web03 centos:7

[root@localhost ~]# docker exec -it web03 /bin/bash

[root@9a398d3ec1f3 /]# cd /data1

[root@9a398d3ec1f3 data1]# cd /data2

(2)数据卷容器

[root@localhost ~]# docker run -dit --volumes-from web03 --name db1 centos:7 /bin/bash

(3)挂载主机目录作为数据卷

案例1

[root@localhost ~]# docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web04 httpd

[root@localhost ~]# echo "ni hao">/data1/index.html

[root@localhost ~]# curl 192.168.10.101:8080

案例2

[root@localhost ~]# mkdir -p /www/{conf,html}

将编辑好的nginx配置文件拷贝到/www/conf

将网站代码拷贝到/www/html

[root@localhost ~]# docker run -dit -p 9090:80 -v /www/conf/nginx.conf:/etc/nginx/nginx.conf -v /www/html:/www/html --name web05 nginx /bin/bash -c "nginx"

[root@localhost conf]# docker run -d -p 9090:80 -v /www/conf/default.conf:/etc/nginx/conf.d/default.conf -v /www/html:/usr/share/nginx/html -v/www/nginx/log:/var/log/nginx --name web05 nginx

相关推荐
昌sit!1 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林2 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
一坨阿亮2 小时前
Linux 使用中的问题
linux·运维
A ?Charis4 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
城南vision4 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge4 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱4 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
北漂IT民工_程序员_ZG5 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
力姆泰克5 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
BPM_宏天低代码5 小时前
低代码 BPA:简化业务流程自动化的新趋势
运维·低代码·自动化