docker学习笔记

docker容器技术简介

docker是基于golang语言开发而来,基于Linux内核的Cgroups、NameSpace,以及Union FS等技术,对进程进行隔离封装,属于操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主机和其他隔离的进程,也被称之为容器。
docker被定义为开源的容器引擎,可以方便的对容器进行管理。例如对镜像打包封装,引入Docker Register对镜像统一管理。
在这里插入图片描述
在这里插入图片描述

和传统虚拟机技术差异

虚拟机虚拟一套硬件,在上面运行一个完整的操作系统。
容器内应用程序直接运行在宿主机内核上,容器没有自己的内核,也没有对硬件进行虚拟,因此容器比虚拟机更为轻便。

优点:容器能提供宿主机的性能,性能更好;相同配置可以启动的数量更多;启动速度块;不需要CPU虚拟化支持;一致性环境;迁移方便;方便持续交付和部署

核心组件

image镜像,用来构建容器(将运行所需环境打包为镜像文件)

container,容器(应用程序跑在容器中,镜像的运行实例)

镜像仓库(保存镜像文件,提供上传,下载镜像)

关于镜像的理解

docker images搜索地址:hub.docker.com
一个完整的docker镜像可以创建出docker容器运行,我们获取的docker镜像都是不包含linux内核的
docker的架构,镜像就是一个发行版的作用,只需要一个linux内核(这就是docker Union FS,即一个分层的文件系统)
在这里插入图片描述

好处:一大好处就是共享资源,例如多个镜像来自同一个base镜像,那么在docker host只需要存在一份base镜像。内存也只需要加载一份host就能为多个容器服务。即使多个容器共享一个base镜像,某个容器修改了base镜像内容,如修改etc下配置文件,其他容器中的etc下配置文件是不会被修改的,这就是写时复制特性。
举例基本构建流程:比如定义一个mysql5.6镜像:
1.获取基础镜像,选择一个发行版平台(ubutu,centos)
2.再基础镜像中安装mysql5.6
然后可以导出镜像。
从这个过程可以感觉到docker镜像时一层一层添加的,层级概念就出来了,底层时centos镜像,上层时mysql镜像

容器

镜像运行的实例,当容器启动后一个新的可写层加载到镜像顶部,这一层通常被称为容器层,认清楚下的都被称为镜像层
在这里插入图片描述
在这里插入图片描述

docker生命周期

从创建到上传到仓库然后其他人可以拉取使用,当然docker也支持本地save和load,具体如下图

在这里插入图片描述

docker安装

基础环境配置

1.防火墙:systemctl stop firewalld

2.yum源替换

3.安装基础软件(一些命令,用的适合再装即可)

安装流程

1.开启linux内核的流量转发

cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.ip_forward=1
EOF

加载修改的参数

modprobe br_netfilter
sysctl -p /etc/sysctl.d/docker.conf

2.yum安装(yum源配置完了)

yum install docker-ce-20.10.6 -y
#卸载的话
yum remove docker-xxx

一些加速配置和启动方式

使用docker需要获取镜像文件,默认下载再dockerhub下载,网速较慢,国内很多云服务商提供了加速器服务,如阿里云加速

#修改docker配置文件,此处使用七牛云镜像站
cat /etc/docker/daemon.json
{"registry-mirrors":["https://reg-mirror.qiniu.com"]}
#也可也配置源加速
#https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
   "registry-mirrors":[
       https://8xpk5wnt.mirror.aliyuncs.com"
    ]
}

#重启,设置开机自启
systemctl deamon-reload
systemctl enable docker
systemctl restart docker

常用命令

镜像管理

#1.获取镜像,是从配置的docker镜像站中拉取
docker pull xxx(你要的镜像,比如nginx,意为找到名字为xxx的镜像文件)
#也可也先搜索
docker search xxx(去仓库搜索名为xxx的镜像)
#查看本地镜像有那些
docker image ls
#可以增加-q来只列出id
#--format “{{.ID}}--{{.Reporsitory}}”格式化显示大括号里为要显示的对象
##--format “table {{.ID}}\t{{.Reporsitory}}”格式化显示(表格显示)大括号里为要显示的对象
docker images /docker image ls 
#删除镜像
docker rmi xxx(镜像id) 
#删除容器记录
docker rm xxx
#批量删除,反引用是获取结果
如:echo `docker images -aq`能输出所有镜像id
docker rmi `docker images -aq`
#导出镜像
docker image save 镜像名:tag >路径/名字.tgz
#导入镜像
docker images load  -i  xxxx
#查看镜像详细信息
docker image inspect 镜像id

容器管理

#2.运行镜像,生成容器
-d 后台运行
-p 80:80 端口映射,宿主机端口:容器内的端口
docker ps #查看运行中的容器
docker stop xxx(容器id) #停止容器
docker run -it xxxx bash #进入容器内
-i:交互式命令操作
-t:开启一个终端
xxx:容器id/容器名
bash:进入容器后,执行的命令

docker run -it 镜像名 bash #运行并进入容器内
docker run 镜像名 命令 #运行并进入容器内执行指定命令
docker run -d(后台参数) --rm(运行完自动删除记录)   --name(给容器起个名字) xxx 镜像名
docker stop 容器id #停止容器
docker log -f 容器id #查看日志(容器内的输出)
docker container inspect 容器id #查看容器信息
docker run -d --name xxx -p 85:80 镜像名  #后台运行容器且起了个名字且将宿主机85和容器80端口映射
docker port 容器id #查看端口转发情况
端口映射直接使用-P后面不用加宿主机和容器端口表示随机映射
docker commit 容器id 新的镜像名 #提交镜像

Dockerfile

通过dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依次添加层,最终生成一个新的镜像,极大简化了部署工作。
官方提供的dockerfile实例:https://github.com/CentOS/CentOS-Dockerfiles
1.指定基础镜像 FROM centos:6.8
2.制作镜像操作指令 RUN yum install openssh-server -y
3.容器启动时执行的操作 CMD [“/bin/bash”]

常用指令

FROM 指定基础镜像
MAINTAINER 指定维护者信息,可以没有
RUN 在命令前添加想让他执行什么命令
ADD 添加宿主机的文件到容器内,会自动解压
COPY 作用和ADD一致,拷贝文件,不会自动解压
WORKDIR 设置工作目录
VOLUME 设置卷,挂载工作目录
EXPOSE 指定对外端口
CMD 指定容器启动后要执行的命令
ENTRYPOINT 作用和CMD一样,之前容器启动程序和参数,当有了ENTRYPOINT后,CMD语义就发生变化,CMD内容就会当作参数传给ENTRYPOINT
要新建Dockerfile文件,然后执行docker build .
修改镜像名 docker tag 镜像id 名字

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

使用 Dockerfile 定义应用程序的环境。

使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行 docker-compose up 命令来启动并运行整个应用程序。

基本使用方式:

docker-compose -f docker-compose.yml ps#查看
docker-compose -f docker-compose.yml up -d#启动
docker-compose -f docker-compose.yml ps#查看
docker-compose -f docker-compose.yml stop#停止

例子:

version: '3'
services:
  web:
    build: .
    ports:
   - "5000:5000"
    volumes:
   - .:/code
    - logvolume01:/var/log
    links:
   - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值