什么是docker

l  使用最广泛的开源容器引擎

l  一种操作系统级的虚拟化技术

l  依赖于Linux内核特性:Namespace和Cgroups

l  一个简单的应用程序打包工具

docker的设计目标

l  提供简单的应用程序打包工具

l  开发人员和运维人员职责逻辑分离

l  多环境保持一致

docker基本组成

l  Docker Client:客户端

l  Docker Daemon:守护进程

l  Docker Images:镜像

l  Docker Container:容器

l  Docker Registry:镜像仓库

docker应用场景

l  应用程序打包和发布

l  应用程序隔离

l  持续集成

l  部署微服务

l  快速搭建测试环境

l  提供PaaS产品(平台即服务)

docker版本

²  社区版(Community Edition  简称CE)

²  企业版(Enterprise Edition 简称EE)

支持平台

Linux(centos,Debian,Fedora,Oracle,Linux,RHEL,ubuntu)

Mac

Windows

centos 7.x 安装docker

docker不支持centos6以及更老的版本

安装前基础优化

#安装基础软件
yum install -y lrzsz nmap tcpdump screen tree dos2unix nc iproute net-tools unzip wget vim bash-completion.noarch telnet ntp ntpdate lsof crul #更新补丁
echo -e "exclude=kernel*\nexclude=centos-release*" >>/etc/yum.conf
yum update -y #修改字符集
echo "LANG="zh_CN.UTF-8"" >/etc/locale.conf
source /etc/locale.conf #关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd –state #关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0 # 时间同步
echo "#time sync by fage at 2017-1-12" >>/var/spool/cron/root && echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root && systemctl restart crond.service

 卸载旧版本docker

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

使用阿里云源进行安装docker-ce并配置加速器

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
mkdir -p /etc/docker
cat >/etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker.service 

管理镜像常用命令

指令

描述

ls

列出镜像

build

构建镜像来着Dockerfile

history

查看镜像历史

inspect

显示一个或多个镜像详细信息

pull

从镜像仓库拉取镜像

push

推送一个镜像到镜像仓库

rm

移除一个或多个镜像

prune

移除为使用的镜像,没有标记或被任何容器引用的

tag

创建一个引用源镜像标记目标镜像

export

导出容器文件系统到tar归档文件

import

导入容器文件系统tar归档文件创建镜像

save

保存一个或多个镜像到一个tar归档文件

load

加载镜像来自tar或标准输入

创建容器常用选项

选项

描述

-i,-interactive

交互式

-t, -tty

分配一个伪终端

-d,-detach

运行容器到后台

-e,-env

设置环境变量

-p,-publish list

发布容器端口到主机

-P,-publish-all

发布容器所有EXPOSE的端口到宿主机随机端口

-name string

指定容器名称

-h,-hostname

设置容器主机名

-ip string

指定容器IP,只能用于自定义网络

-network

连接容器到一个网络

-mount mount

将文件系统附加到容器,挂载

-v,-volume list

绑定挂载一个卷

-restart string

容器退出时重启策略,默认:on,可选值:[always | on-failure]

容器资源限制

选项

描述

-m , -memory

容器可以使用的最大内存量

-memory-swap

允许交换到磁盘的内存量

-memory-swappiness=<0-100>

容器使用swap分区交换的百分比(0-100,默认为-1)

-oom-kill-disable

禁用OMM Killer,如果不禁用会杀掉宿主机使用内存最高的进程

-cpus

可以使用的CPU数量

-cpuset-cpus

限制容器使用特定的CPU核心,如(0-3,  0,1)

-cpu-shares

CPU共享(相对权重)

示例:

内存限额:

允许容器最多使用500M内存和100Mswap(禁用填写和内存一样),并禁用OMM Killer:

docker run -d --name nginx3 --memory="500m" --memory-swap="600m" --oom-killer-disable nginx

docker stats  web3            #动态查看资源使用情况

docker stats --no-stream web3  #静态方式查看资源使用情况

CPU限额:

允许容器最多使用一点五核的CPU:

docker run -d --name nginx4 --cpus="1.5" nginx

允许容器最多使用50%的CPU:

docker run -d --name ngixn5 --cpus=".5" nginx

管理镜像常用命令

选项

描述

ls

列出容器

inspect

查看一个或多个容器详细信息

exec

在运行容器中执行命令

commit

创建一个新镜像来自一个容器

cp

拷贝文件/文件到一个容器

logs

获取容器日志

port

列出或致电容器端口映射

top

显示一个容器运行的进行

stats

显示容器资源使用统计

stop/start

停止/启动一个或多个容器

rm

删除一个或多个容器

update

更新容器使用资源,仅限于资源更新,即时生效

管理应用程序数据

1、 将数据从宿主机挂载到容器中的三种放

2、 Volume

3、 Bind Mounts

l  volumes:Docker管理宿主机文件系统的一部分(/var/lib/volumes),保存数据的最近方式,持久化挂载

l  bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中,动态绑定挂载

l  tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统,如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能

Volume方式挂载

管理卷:

docker volume create nginx-vol    #创建数据卷,不创建的话指定路径去挂载会自动创建

docker volume ls                          #查看所有的数据卷

docker volume inspect nginx-vol  #查看数据卷的详细信息

挂载方式

docker run -d --restart=always --name nginx01 -p 88:80 --mount src=nginx_vol,dst=/usr/share/nginx/html nginx

数据卷是可以共享的,其他镜像可以容器可以共享使用,如果更改数据卷的内容,容器内也实时的更改,如果容器挂了,进不去也起不来了,可以重新起一个容器,使用原来的数据卷进行挂载,秒级启动还原,但是数据卷丢失了就都丢失了

Bind Mounts

docker run -d --restart=always --name nginx01 -p 88:80 --mount type=bind,src=/mnt/,dst=/usr/share/nginx/html nginx

Volume特点:

l  多个运行容器直接共享数据

l  当容器停止或被移除时,该卷依然存在

l  多个容器可以同时挂载相同的卷

l  当明确删除卷时,卷才会被删除

l  将容器的数据存在远程主机或者其他存储上

l  将数据从一台Docker主机迁移到另外一条时,先停止容器,然后备份数据卷目录(/var/lib/docker/volumes/)

Bind Mounts 特点:

l  从主机共享配置文件到容器,默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析

l  在Docker主机上的开发环境和容器之间共享源代码,例如:可以将Meven target目录挂载到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问构建的项目包。

l  当docker主机的文件或目录结构与容器所需的绑定挂载一致时

容器网络

1、 网络模式

2、 容器网络访问原理

bridge  桥接方式

-net=bridge

默认网络,docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中

host   使用宿主机的网络 

-net=host

容器不会获得一个独立的network namespace,而是与主机共用一个,这意味容器不会有自己的网卡信息,而是使用宿主机的,容器除了网络,其他都是隔离的

none  

-net=none

获取的network namespace,但不为容器进行任何网络配置,需要手动配置

container  

-net=container:Name/ID

与 指定的容器使用同一个network namespace,具有同样的网络配置,两个容器除了网络,其他都是隔离的

后面新建的容器使用之前建立好的容器网络

docker run -itd --restart=always --name bs -p 99:80 busybox

docker run -d --restart=always --name nginx01 --net container:bs nginx

自定义网络

与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或主机名容器之间网络通信

docker network create bs-test

然后启动容器的时候使用先创建的这个网络命名空间即可

docker run -it --name bs4 --net bs-test busybox

容器网络访问原理

docker设置容器使用固定IP

docker network create --subnet=172.172.0.0/24 docker-br0         # 创建网络

docker network ls |grep myNetwork

docker run -itd --name centos --network myNetwork --ip 172.18.0.2 centos bash   # 启动容器并加入自定义网络

docker inspect centos | grep IPAddress | tail -1    # 查看容器IP

centos 7 安装docker 常用指令的更多相关文章

  1. Centos7 docker 常用指令

    Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上 一.docker的安装及卸载 1.查看当前系统内核版本: [root@docker ~]# uname - ...

  2. CentOS 7 安装 Docker

    CentOS 7 安装 Docker 这里介绍 ContOS 7 的安装 docker V1.2+,包括阿里云加速 docker 镜像下载的设置,这对提升使用 docker 体验至关重要.其他系统安装 ...

  3. Docker学习笔记之-在CentOS中安装Docker

    上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...

  4. 在RedHat/CentOS下安装Docker(不升级内核)

    由于内核版本问题,最初仅Ubuntu可以较好的支持Docker.不过,由于RedHat系列OS(REHL.CentOS)是目前主流的Linux服务器操作系统,所以令RedHat系列OS支持Docker ...

  5. 简单介绍一下在CentOS上安装Docker。

    简单介绍一下在CentOS上安装Docker. 前置条件: 64-bit 系统 kernel 3.10+ 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.使用 sudo 或 r ...

  6. Centos 下面安装 docker

    试过了虚拟机VM ,今天尝试在虚拟机centos 中安装 docker ,入门是看的阮一峰的http://www.ruanyifeng.com/blog/2018/02/docker-tutorial ...

  7. docker学习之路-centos下安装docker

    前言 我要在云服务器上做一个asp.net core的webapi应用,使用docker来部署应用,中间用到的任何组件包括nginx和sqlserver 2017都是用docker来装载运行,所以,这 ...

  8. Centos下安装Docker,并配置国内docker源

    Centos下安装Docker 替换为国内的yum源(可选): mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.re ...

  9. docker基础——关于安装、常用指令以及镜像制作初体验

    为什么使用docker docker就是一个轻量级的虚拟机,他解决的是服务迁移部署的时候环境配置问题.比如常见的web服务依赖于jdk.Tomcat.数据库等工具,迁移项目就需要在新的机器重新配置这些 ...

随机推荐

  1. Shader之溶解效果的几种实现方法

    这里通过 “是否丢弃像素”的2种方法,写2个shader,效果是一样的,也提到了,丢弃某个像素的3种方式. 是否丢弃: 1.通过脚本控制shader变量判断当前是否丢弃像素,需要额外脚本: 2.sha ...

  2. Docker 搭建 Redis Cluster 集群环境

    使用 Docker 搭建 Redis Cluster,最重要的环节就是容器通信的问题,这一块我们在之前的文章中已经给大家解决了<Docker 网络模式详解及容器间网络通信>,本篇文章主要练 ...

  3. 深入了解Netty【八】TCP拆包、粘包和解决方案

    1.TCP协议传输过程 TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由 ...

  4. 理解C#回调函数

    序言 本篇主要学习了C#回调函数的定义使用.欢迎各位大牛的指导. 正文 回调函数是什么? 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调 ...

  5. 分布式事务框架.NetCore CAP总结

    来自CAP原作者yang-xiaodong的原理图: 本文撰写者:cmliu,部分内容引用自官方文档,部分内容待更新# .NetCore CAP # 1,简介 CAP 是一个遵循 .NET Stand ...

  6. Linux:less and Aix:more

    在运维工作中,经常要查询应用日志,有Linux和Aix系统,个人感觉,Linux查询日志用less命令比较方便,Aix查询日志用more命令比较方便,在此总结一下两个命令的使用方法 AIX more命 ...

  7. volatile域浅析

    内存模型的相关概念 计算机中执行程序时,每条指令都是在CPU中执行,执行指令的过程必然会涉及到数据的读取和写入.而程序运行时的数据是存放在主存(物理内存)中,由于CPU的读写速度远远高于内存的速度,如 ...

  8. APS定时任务框架

    一.安装与简介 1.安装 pip install apscheduler 官方文档:https://apscheduler.readthedocs.io/en/latest/# 2.简介 APSche ...

  9. TKE 集群组建最佳实践

    Kubernetes 版本 Kubernetes 版本迭代比较快,新版本通常包含许多 bug 修复和新功能,旧版本逐渐淘汰,建议创建集群时选择当前 TKE 支持的最新版本,后续出新版本后也是可以支持 ...

  10. Typecho反序列化漏洞

    Typecho Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了命令执行,Typecho 1.1(15.5.12)之前的 ...