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](https://atomhub.openatom.cn "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

相关推荐
Bruce-li__2 小时前
创建私人阿里云docker镜像仓库
阿里云·docker·云计算
碣石潇湘无限路2 小时前
【云原生】Kubernetes CEL 速查表
容器·贪心算法·kubernetes
阳区欠3 小时前
【Linux】进程通信
linux·运维·服务器·共享内存·进程通信·system v·管道文件
may_一一3 小时前
终端SSH连接工具SecureCRT安装和连接Linux
运维·服务器·ssh
姓刘的哦4 小时前
Ubuntu环境安装
linux·运维·ubuntu
mingyuewu4 小时前
MAC安装docker 后提示com.docker.vmnetd”将对您的电脑造成伤害
macos·docker·容器
小小寂寞的城4 小时前
Ubuntu里安装Jenkins
ubuntu·ci/cd·docker·jenkins
春生黎至10055 小时前
GZ073网络系统管理赛项赛题第1套模块A:网络构建解题笔记
运维·网络
IT程序媛-桃子5 小时前
【网安面经合集】42 道高频 Web 安全面试题全解析(附原理+防御+思路)
运维·网络·安全·面试
❀͜͡傀儡师5 小时前
多台服务器上docker部署 Redis 集群
运维·服务器·redis