centos 7 安装docker 常用指令

什么是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*
exclude=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

使劲折腾才会有更好的结果!!!! 如有不对请不吝赐教,感谢! 转载请注明出处!
原文地址:https://www.cnblogs.com/huanglingfa/p/13764342.html