docker基础
本文基于马哥的docker和k8s视频总结, 在此致谢马哥.
主机级虚拟化:
- Type-Ⅰ
- Type-Ⅱ
容器级虚拟化:
- linux领域的容器化技术依靠六个namespaces (UTS, Mount, IPC, PID, User, Net) + chroot + cgroups 实现
- 隔离性远不如主机级虚拟化好
3.8版本以后的内核才支持容器化技术 (centos6天然被排除在外, 在centos6上可以跑docker, 但是会有很多问题)
![](https://img.haomeiwen.com/i14021735/9da30ca2d8263717.png)
资源限制:
![](https://img.haomeiwen.com/i14021735/4c37734d1d65759f.png)
LXC (容器引擎)
LinuX Container工具包含的命令:
- lxc-create, template (指向仓库, 完成内部依赖环境的安装, 可定制)
一个容器中运行多个进程
docker
LXC的增强版
一个容器中只运行一个进程
程序之间有依赖关系, 因此需要容器编排工具:
- machine + swarm + compose
- mesos + marathon
- kubernetes -> k8s (google研发)
LXC -> libcontainer -标准化-> runC
docker architecture
![](https://img.haomeiwen.com/i14021735/ea5d217a7d446f20.png)
C/S架构应用程序
分层构建, 联合挂载
基于http/https
通过贴标签的形式给repository中的镜像做标注
- 镜像: 静态
- 容器: 动态, 有生命周期
docker objects
create and use: images, containers, networks, volumes, plugins and other objects
images: read-only
containers: a runnable instance of an image
安装及使用docker
![](https://img.haomeiwen.com/i14021735/c757a9b0d26a32bb.png)
docker安装包位于: extras仓库
# 先下载源
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 然后把里面原本指向外国的centos仓库的url改为指向国内的docker仓库
# 如清华的docker源:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
# 也可以使用阿里云的docker源, 直接指向了阿里云的docker镜像仓库, 无需修改
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce # 注意安装docker-ce而不是docker, 否则使用的是ee版
# docker-ce配置文件: /etc/docker/daemon.json
# 此目录默认不存在, 需自建, 可在此文件中定义加速器, 末尾加上
{
"registry-mirrors": ["https://p2aci6x1.mirror.aliyuncs.com", "https://registry.docker-cn.com"]
}
# 注意添加完成之后重启docker daemon!
# docker镜像加速方式:
# 1. docker cn
# 2. 阿里云加速器, 需要去阿里云容器镜像服务网站注册, 然后系统会给你分给你一个地址, 如我的加速器地址: https://p2aci6x1.mirror.aliyuncs.com
# 3. 中科大
systemctl start docker
# 检查前面的加速器是否被使用:
docker info
Registry Mirrors:
https://p2aci6x1.mirror.aliyuncs.com/ # 有这两项显示这说明配置成功
https://registry.docker-cn.com/
常用操作
![](https://img.haomeiwen.com/i14021735/c53794b554edb8ba.png)
搜索并下载指定镜像
docker search nginx:tags # 搜索到指定镜像后可以用pull拉取
image pull nginx:alpine
image ls
docker image pull quay.io/coreos/flannel # 拉取某个镜像
alpine: 专门用于构建容器小镜像的发行版本
启动或停止容器
docker container create | run # run: 新建并启动
start | restart | stop | kill # kill: 强制停止
pause | unpause
rm
ls
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name string Assign a name to the container # 指定容器名
-h, --hostname string Container host name # 指定容器的主机名, 默认的主机名是ID
-p, --publish list # Publish a container's port(s) to the host 指定暴露的端口
--add-host list Add a custom host-to-IP mapping (host:ip)
# 启动container时在容器的/etc/hosts中自动注入ip和主机名的对应关系
--network network Connect a container to a network
# 指定容器连接的网络类型
# bridge: default
# none: 只有lo, 封闭式容器
# host: 与宿主机共享一块网卡
--dns list Set custom DNS servers # 设置DNS主机
-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY # 附加终端
# shell进程可以进行交互, 因此可以加上-it选项
-d, --detach Run container in background and print container ID
# 后台运行容器, 注意: 程序依旧在容器中的前台运行
--rm Automatically remove the container when it exits
# 容器运行完后自动删除
docker container run --name b1 -it busybox:latest
docker container stats b1 # 查看镜像的资源使用情况
exit # 进程退出之后容器并没有被删除
docker ps [-a] # -a: 可显示停止状态的容器
docker container ls [-a]
- 当指定的镜像本地不存在时, 只要本地设置的register没问题, docker会自动到register去下载镜像, 因此可以启动镜像是不需要事先下载镜像
- 启动一个程序不能让程序在容器中运行在后台, 只要运行在后台, 一启动就终止!!!
启动一个名为ngx1的容器, 在上面跑nginx进程
docker container run --name ngx1 -d nginx
docker inspect ngx1 # 可以查看到nginx运行的ip地址-> "IPAddress": "172.17.0.2"
curl http://172.17.0.2
启动一个名为kvstor1的容器, 在上面跑redis进程
docker container run --name kvstor1 -d redis:4-alpine
a877b2696e4cdc404c114c939a31c6e3733d76717703da171900be2f264d0a8a # 执行此命令后返回一串container ID
docker container exec CONTAINER_NAME COMMAND # 在容器中执行另外一个命令, 但要指明容器
docker container exec -it kvstor1 /bin/sh # 使用/bin/sh进入container进行交互
/data # redis-cli
查看日志
docker container logs ngx1
docker常用命令及状态
[图片上传失败...(image-6a4af8-1567102253287)]
网友评论