什么是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. Istio 的配置分析

    Istio 的配置分析 目录 Istio 的配置分析 Analyzer 的消息格式 ConflictingMeshGatewayVirtualServiceHosts 问题解决 举例 Conflict ...

  2. 12_进程,线程,协程,IO多路复用的区别

    1.进程 1.进程可以使用计算机多核 2.进程是资源分配的单位 3.进程的创建要比线程消耗更多的资源效率很低 4.进程空间独立,数据安全性跟好操作有专门的进程间通信方式 5.一个进程可以包含多个线程, ...

  3. 19_Python算法

    1.冒泡算法 list = [1, 5, 2, 6, 9, 3, 4, 0] print(len(list)) # conunt = 1 while conunt < len(list): fo ...

  4. nginx模型概念和配置文件结构

    一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...

  5. 哪些方法可以绕过PowerShell Execution Policy?

    哪些方法可以绕过PowerShell Execution Policy? 转: https://blog.csdn.net/qq_27446553/article/details/50577296

  6. 再不迁移到Material Design Components 就out啦

    翻译自国外文档加自己理解 原文 我们最近宣布了 Material Design Components(MDC)1.1.0 ,这是一个库更新,为您的 Android 应用程序带来了 Material T ...

  7. 对vue的初步学习

    vue: vue:一个mvvm框架(库),和angular类似 比较容易上手 指令以v=xxx 一片html代码配合接送,在new一个vue实例 适合:移动端,小巧 vue基本雏形 v-model 一 ...

  8. 知识全聚集 .Net Core 技术突破 | 如何实现一个模块化方案一

    简介 模块化的介绍一共2篇 这一篇我们实现一个功能非常简单的StartupModules模块化. 第二篇我们来实现一个ABP的模块化效果. 思考 其实来简单想一下模块化的实验思路,写个接口=>模 ...

  9. 阿里云docker部署mysql

    看完我的上一个博客之后,对centos系统应该有一定的了解,话不多说,接下来我们来在docker容器中部署mysql. 1.下载mysql镜像,因为本人用的5.7版本,你也可以下载最新版,都是可以的 ...

  10. openstack 介绍

    penstack介绍(1)   一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 ...