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

相关推荐
筑梦之路39 分钟前
CentOS 7 安装fail2ban hostdeny方式封禁ip —— 筑梦之路
linux·运维·centos
敲上瘾2 小时前
动静态库的制作与使用(Linux操作系统)
linux·运维·服务器·c++·系统架构·库文件·动静态库
feng_blog66887 小时前
【docker-1】快速入门docker
java·docker·eureka
贾贾20238 小时前
配电自动化系统“三区四层”数字化架构
运维·科技·架构·自动化·能源·制造·智能硬件
远方 hi9 小时前
linux如何修改密码,要在CentOS 7系统中修改密码
linux·运维·服务器
元气满满的热码式9 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
资讯分享周11 小时前
过年远控家里电脑打游戏,哪款远控软件最好用?
运维·服务器·电脑
chaodaibing11 小时前
记录一次k8s起不来的排查过程
运维·服务器·k8s
mcupro12 小时前
提供一种刷新X410内部EMMC存储器的方法
linux·运维·服务器
不知 不知12 小时前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos