Union FS: 是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统
Cgroups:实现对资源的配额和度量
Namespaces:LXC所实现的隔离性,主要来自kernel的namespaces,
其中PID、NET、IPC、MNT、UTS等namespace将container的进程、
网络、消息、文件系统、UTS和用户空间隔离开
LXC: Linux Container,提供了一种操作系统级的虚拟化方法。
借助namespaces和cgroups来管理container
-
Docker安装
- 检查内核
运行Linux3.8或更高的版本内核
运行64位CPU架构的计算机(目前只能是x86_64和amd64),目前不支持32为CPU
内核必须支持并开启cgroup和命名空间(namespace)功能
[root@registry ~]# uname -a
Linux registry.qiku.com 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
- 检查Device Mapper
检查 /proc/devices 是否有Device Mapper 条目
[root@registry ~]# grep device-mapper /proc/devices
253 device-mapper
3 安装方法
安装方式:
yum或apt-get
sudo yum install docker 或 sudo apt-get install docker
RPM 文件安装
sudo wget ftp://rpmfind.net/linux/mageia/distrib/cauldron/x86_64/media/core/release/docker-17.03.1-3.mga6.x86_64.rpm
sudo rmp -Uvh docker-17.03.1-3.mga6.x86_64.rpm
脚本安装
sudo yum update
curl -sSL https://get.docker.com/ | sh
sudo service docker start
源码编译安装
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
sudo yum install -y docker-engine
sudo service docker start
sudo chkconfig docker on
或
sudo systemctl start docker.service
sudo systemctl enable docker.service
-### Docker命令
- 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
- 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|import|port]
- 容器rootfs命令 — docker [commit|cp|diff]
- 镜像仓库 — docker [login|pull|push|search]
- 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
- 其他命令 — docker [info|version]
#拉取
docker pull registry.domain.com:5000/repos:<tag_name>
docker pull dl.dockerpool.com:5000/mongo:latest
[root@registry ~]# docker images --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
dockermaster_master latest sha256:76c86913b2bf78349fbeee7f7eff4c538a2d9b9ad6073b0dd216a128f7ab4681 38 hours ago 940MB
<none> <none> sha256:2a6d16993de0256f4d77a2585fed1b076399d1f4454c58dc56fa275e37cc303a 38 hours ago 940MB
mavencentos latest sha256:8b23262eab3dbec329f3c5000a2e8c1e516eb6d60d4cc38126dc6f4e4213311d 38 hours ago 791MB
- 给镜像打上标签(tag)
tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。
docker tag 195eb90b5349 seanlook/ubuntu:rm_test
docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag
image.png
- 推送一个镜像到仓库
docker push 10.100.21.114:5000/mongo:1.0
-启动一个镜像
docker run –it –name centos1 centos
docker run -d -p 5000:5000 --restart always --name registry[别名] registry[镜像名称]
docker run -d --restart=always --name test_container1 ubuntu /bin/bash -c "while true; do echo hello world ; sleep 1; done"
run 参数:
-i:选项表示使用交互模式,始终保持输入流开放
-t: 选项表示分配一个伪终端
--name:可以指定docker run 命令启动的容器名字,若无此项Docker容器将随机分配一个名字
-d: 选项表示将容器在后台运行。
-p:选项用户将容器的端口暴露给宿主机的端口,格式host-port:container-port
-v:用于挂载一个volume 可以用多个-v参数同时挂载多个volume。Volume的格式为[host-dir]:[container-dir]:[rw:ro]
-c: 选项表示用于运行容器中的所有进程分配CPU的shares值,这时一个相对权重,实际的处理速度与宿主机的CPU相关。
-m: 选项表示用户限制为容器中所有的进行分配的内存总量,以B,K,M,G为单位
-
查看容器
docker ps 默认显示当前正在运行中的container
docker ps -a 查看包括已经停止的所有容器
docker ps -l 显示最新启动的一个容器(包括已停止的) -
连接到正在运行中的container(exec)
docker exec –it 容器ID或容器名称 -
查看image或container的底层信息(inspect)
inspect的对象可以是image、运行中的container和停止的container。
docker inspect --format=‘{{.Name}}’ 容器或镜像
docker inspect -f=‘{{.Name}}’ 容器或镜像
image.png -
查看容器中正在运行的进程(top)
ps -ef|grep docker
docker top 5289df0834bf
docker top wiki
- 显示一个或多个容器的统计信息(stats)
oot@registry docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b7dc14d617a dockermaster_master "/bin/tini -- /usr..." 39 hours ago Up 39 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp dockermaster_master_1
[root@registry docker]# docker stats 1b7dc14d617a
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1b7dc14d617a 0.05% 789.5MiB / 3.702GiB 20.83% 2.11MB / 580kB 53.9MB / 318kB 53
- 获取容器的日志(logs)
当容器运行过程中,我们需要知道容器内部具体发生了什么可以通过 docker logs 来进行查看。
docker logs [OPTIONS] CONTAINER
docker logs --tail 10 CONTAINER –获取容器日志的最后10行
docker logs --tail 0 -f CONTAINER ----获取容器的最新日志而不必读整个文件
docker logs --tail 10 -t -f CONTAINER --- -t标志为每条日志项加上时间戳。
docker run --name test_container -d ubuntu /bin/sh –c "while true; do echo hello world; sleep 1; done"
- 控制Docker守护进程和容器所用的日志驱动
sudo docker run --log-driver="syslog" --name test_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
Driver | Description |
---|---|
none | No logs will be available for the container and docker logs will not return any output. |
json-file | The logs are formatted as JSON. The default logging driver for Docker. |
syslog | Writes logging messages to the syslog facility. The syslog daemon must be running on the host machine. |
journald | Writes log messages to journald. The journald daemon must be running on the host machine. |
gelf | Writes log messages to a Graylog Extended Log Format (GELF) endpoint such as Graylog or Logstash. |
fluentd | Writes log messages to fluentd (forward input). The fluentd daemon must be running on the host machine. |
awslogs | Writes log messages to Amazon CloudWatch Logs. |
splunk | Writes log messages to splunk using the HTTP Event Collector. |
etwlogs | Writes log messages as Event Tracing for Windows (ETW) events. Only available on Windows platforms. |
gcplogs | Writes log messages to Google Cloud Platform (GCP) Logging. |
nats | NATS logging driver for Docker. Publishes log entries to a NATS server. |
-
将一个container固化为一个新的image(commit)
当我们在制作自己的镜像的时候,会在container中安装一些工具、修改配置,如果不做commit保存起来,那么container停止以后再启动,这些更改就消失了。
docker commit <container> [repo:tag]
后面的repo:tag可选
只能提交正在运行的container,即通过docker ps可以看见的容器, -
docker build 使用此配置生成新的image
build命令可以从Dockerfile和上下文来创建镜像:
docker build [OPTIONS] PATH | URL | -
网友评论