Docker基础
最近两年随着微服务而流行起来的Docker是一种轻量级容器技术(相对于VMWare,KVM等Hypervisor解决方案).
它能给开发,测试,运维各团队提供一个统一的运行环境, 这点很实用.
Docker可以看做在内核容器技术(Cgroup和Namespace)的基础上提供更高级功能的控制工具,主要特性:
(1)跨主机部署(2)以应用为中心 (3)自动构建 (4)版本管理 (5)组建重用 (6)共享 (7)工具生态链
补充: 关于虚拟化的主流分类
- 操作系统(服务器)级别的虚拟化: 在硬件层之上做Hypervisor,内核级隔离. 常见的有VMWare vsphere, XEN,KVM, Hyper-V
- 进程(容器)级别的虚拟化: Docker 和LXC(Linux Container)
配置国内镜像
国内使用前Docker的第一件事,必须先配置国内镜像加速器,否则下载容器镜像龟速(最近安装docker也不用了)
使用示例:
# 如果想永久保存,编辑/etc/docker/daemon.json并添加
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
# 必须重启服务以生效
sudo service docker restart
# 检查是否生效
docker info
说明:详情可参考掘金文章
安装
Ubuntu环境安装
# 安装Docker
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 列出版本
sudo apt-cache madison docker-ce
# 指定版本
sudo apt-get -y install docker-ce=[VERSION]
sudo apt-get -y install docker-ce=5:24.0.0-1~ubuntu.22.04~jammy
# 注:docker-compose已内置并改名为 docker compose
sudo apt-get -y install docker-ce
CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
CentOS离线安装
依赖库: libcgroup和device-mapper-*
# 离线包下载: http://rpmfind.net/linux/rpm2html/search.php
rpm -ivh clibcgroup-*
rpm -ivh device-mapper-* --force --nodeps
# 追加一行到/etc/fstab
none /sys/fs/cgroup cgroup defaults 0 0
# 重启以生效
shutdown -r now
# 启动cgroup
service cgconfig start
# 下载docker: https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
rpm -ivh docker-engine-*.rpm
service docker start
非root运行docker
sudo groupadd docker # 可选
sudo usermod -a -G docker xulz
sudo gpasswd -a xulz docker # add to docker group
newgrp docker
docker version # 查看效果
基础命令
- docker
- docker-compose : 编排
- docker-machine (Docker Toolbox已过时,不推荐使用)
# 把当前用户添加到docker组
sudo usermod -aG docker xulz
## docker
docker run # 在新容器运行命令
docker start # 启动容器
# 查看所有容器
docker ps -a
docker ps -a --no-trunc # 显示完整的命令
# 查看所有镜像
docker images
docker stop/rm xxx
# 删除
docker rm <container_id>
docker rmi <image_id>
# 加载镜像
docker load < <image_file>
# 复制文件到容器
docker cp source_file <container_name>:destination
# 切换到容器终端
docker exec -it container_name /bin/bash
# 在后台启动
docker start `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
# Detatch: Ctrl+p + Ctrl+q
## 常用compose命令
# --build 意味着在启动前先构建容器
# -d 在detached模式运行
docker-compose up --build
docker-compose ps
docker-compose stop
## docker-machine
docker-machine ip
docker-machine env
Docker Hub
到hub.docker.com注册自己的ID, 提供一个私有仓库及不限共有仓库.
今天为了国内访问kubernetes的学习项目方便,建立了一个镜像,步骤如下:
# 需要先在网页创建仓库
# 再命令行登录hub
docker login
docker pull gcr.io/google-samples/kubernetes-bootcamp:v1
docker tag gcr.io/google-samples/kubernetes-bootcamp:v1 xulz/kubernetes-bootcamp:v1
docker push xulz/kubernetes-bootcamp:v1
用Docker部署Flask Web App的示例
主要用到的配置文件:
- Dockerfile : 存放自动化的创建镜像的全部指令> docker build
- docker-compose.yml : 创建多个容器的模板文件,主要包含services,volumns,network
- .env : 设置环境变量
- .dockerignore : 忽略文件
扩展
- Docker SDK for Python
- drone : Continuous Delivery system built on container technology
- Portainer : Docker管理 Web界面
- docker-compose-ui: Docker Compose Web界面
与Vagrant比较
- docker-compose exec CONTAINER /bin/sh == vagrant ssh
- docker cp == vagrant scp