Docker 学习系列 1

1. Docker 容器学习

Docker依赖的Linux内核特性

1.Namespace 命名空间
2.Control groups (cgroups)控制组

1.Namespace命名空间

  • PID (Progress ID) 进程隔离
  • NET (Network) 管理网络接口
  • IPC (InterProcess Communication) 管理跨进程通信的访问
  • MNT (Mount) 管理挂载点
  • UTS (Unix Timessharing System) 隔离内核和版本标识

Docker 容器的能力

  • 文件系统隔离: 每个容器都有自己的root文件系统
  • 进程隔离: 每个容器都运行在自己的进程环境中
  • 网络隔离: 容器间的虚拟网络接口和IP地址都是分开的
  • 资源隔离和分组: 使用 cgroups将CPU和内存之类的资源独立分配给每个Docker容器

Docker 安装与配置

安装前的检测

1.内核版本

$uname -a

2.检测 Device Mapper

$ls -l /sys/class/misc/device-mapper
Docker 安装

安装 Docker Engine-Community
使用 Docker 仓库进行安装在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

sudo yum install -y yum-utils device-mapper- persistent-data lvm2

设置稳定仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本

$ sudo yum install docker-ce docker-ce-cli containerd.io

启动 Docker

sudo systemctl start docker

通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community

sudo docker run hello-world

##2.容器的基本操作
启动容器

$docker run IMAGE [COMMAND] [ARG...]

run 在新容器中执行命令

启动交互式容器

$docker run -i -t IMAGE /bin/bash
-i --interactive=true | false 默认是 false
-t --tty=true | false 默认是 false

查看容器

$docker ps [-a] [-l]
$docker inspect [name]

自定义容器名

$docker run --name=[容器名] -i -t

重新启动停止的容器

$docker start [-i] [容器名]

删除停止的容器

$docker rm [容器名]

##3.守护式容器
#####什么是守护式容器

  • 能够长期允许的容器
  • 没有交互式的会话
  • 适合运行应用程序和服务

启动守护式容器1

$docker run -i -t /bin/bash
Command+P Command+Q 组合键退出

启动守护式容器2

$docker run -d 镜像名 [COMMAND] [ARG...]

附加到运行中的容器

$docker attach [容器名]

查看容器日志

$docker logs [-f] [-t] [--tail] 容器名
-f --follows=true | false 默认为false #跟踪变化
-t --timestamps=true | false 默认为false #加上时间戳
--tail="all" #返回日志结果的范围

查看容器内的进程

$docker top [容器名]

在运行中的容器内启动新进程

$docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]

停止守护式容器

$docker stop 容器名 #发送信号给容器等待容器的停止
$docker kill 容器名 #直接将容器停止

查看和删除镜像

列出镜像

$docker images [OPTIONS] [REPOSITORY]
-a, --all=fasle #显示所有镜像 默认不显示中间层的镜像
-f, --filter=[] #显示的过滤条件
--no-trunc=false #指定不使用截断式显示 唯一ID
-q, --quiet=false #只显示镜像的唯一ID
REPOSITORY   #镜像所属的仓库地址  
TAG         #标签名称   
IMAGE ID   #镜像的唯一ID 默认是截取的   
CREATED   #创建时间   
SIZE    #镜像大小

查看镜像的详细信息

$docker inspect [OPTIONS] CONTAINER | IMAGE | [CONTAINER|IMAGE...]
-f, --format=""

删除镜像

$docker rmi[OPTIONS] IMAGE [IMAGES...]
-f, --force=false #强制删除
--no-prune=false #保留镜像中被打标签的父镜像

获取和推送镜像

查找镜像

[Docker Hub](https://register.hub.docker.com)

$docker search [OPTIONS] TERM
--automated=false #是显示自动化构建的docker
--no-trunc=false
-s, --stars=0 #显示结果的最低星级

拉取镜像

$docker pull [OPTION] NAME [:TAG]
-a, --all-tags=false #下载所有标签的镜像

使用 --registry-mirror 选项
1.修改: /etc/default/docker
2.添加: DOCKER_OPTS="–registry-mirror=http://MIRROR-ADDR"

推送镜像

$docker push [IMAGE]

构建镜像

  • 保存对容器的修改, 并再次使用
  • 自定义镜像的能力
  • 以软件的形式打包并分发服务及运行环境
$docker commit #通过容器构建
$docker build #通过 Dockerfile文件构建
$docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a, --author="" #作者
-m, --message="" #提交信息
-p, --pause=true #不暂停正在提交的容器

使用Dockerfile构建镜像

  1. 创建 Dockerfile
  2. 使用$docker build 命令
$docker build [OPTIONS] PATH | URL | 
--force-rm=false
--no-cache=false
--pull=false
-q, --quiet=false
--rm=true
-t, --tag=""

##Docker的 C/S模式
连接方式

  • unix:///var/run/docker.sock
  • tcp://host:port
  • fd://socketfd

Docker守护进程的配置和操作

  • 查看守护进程
$ps -ef | grep docker
$sudo status docker

使用service命令管理

$sudo service docker start
$sudo service docker stop
$sudo service docker restart

Docker的启动选项

运行相关的

	-D, --debug=false
	-e, --exce-driver="native"
	-g, --graph="/var/lib/docker"
	--icc=true
	-l,--log-level="info"
	--label=[]
	-p,--pidfile="/var/run/docker.pid"

Docker服务器连接相关

-G, --group="docker" #用户组
-H,--host=[]  #主机列表
--tls=false #安全连接相关选项
--tlscacert="/home/sven/.docker/ca.pem"
--tlscert="/home/sven/.docker/cert.pem"
--tlskey="/home/sven/.docker/key.pem"
--tlsverify=false

RemoteAPI相关

--api-enable-cors=false

存储驱动相关

-s, storage-driver=""
--selinux-enabled=fasle
--storage-opt=[]

Registry相关

--insecure-registry=[]
--reigstry-mirror=[]

网络相关的配置

-b,--bridge=""
--bip=""
--fixed-cidr=""
--fixed-cidr-v6=""
--dns=[]
--dns-serach=[]
--ip=0.0.0.0
--ip-forward=true
--ip-masq=true
--iptables=true
--ipv6=false
--mtu=0

你可能感兴趣的:(Linux)