什么是docker
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
简单来说就是,用golang语言开发的一项基于linux的lxc技术的容器管理软件
docker结构
Docker本身架构
发展历史
物理机->虚拟机->虚拟机容器技术(LXC,linux container)->docker为代表的容器管理技术。
linux本身是支持lxc的,用于资源隔离(基于namespace + cgroup)
相比虚拟机,容器更加轻量级
容器
linux本身是支持lxc的,用于资源隔离(基于namespace + cgroup) 容器和其他传统的环境相比
容器的作用
运行镜像,可以直接多外提供服务
- 隔离进程,隔离资源
- 限制资源
- 直接和硬件对接,无虚拟机格外的消耗
相关概念
1. 镜像
打包了代码和运行环境的包,是静态文件,不能直接对外提供服务
2. 容器
3. 仓库
- 公有仓-docker registry
- 私有仓(企业)-harbor
docker使用
1. 创建一个容器运行一个镜像
docker run xxx[nginx,mysql] [-d]
它表示如下
- 下载镜像,如果不存在的话
- 初始化容器,分配隔离资源,如访问ip等
2. 如何进入docker下的某个容器
docker exec [-ti] docker-case sh
3. 如何删除容器
docker rm -f [container name]
或者
docker rm [conatiner id]
4. 宿主机如何访问容器
docker run --name xxxx -d -p [宿主机port]:[容器port] image-name
比如:
docker run --name my-ubuntu-nginx -d -p 8080:80 asx-nginx:ubunt
让后执行curl localhost:容器端口就好了,可以通过公网访问了
5. 拉镜像
docker pull image@tag
比如
docker pull ubuntu@latest
5. 构建对象
docker build [.](当前路径)[-t] image-name:tage [-f] dockerfile-name
dockerfile-name是一些列docker可识别的脚本文件,比如
docker build . -t asx-nginx:ubunt -f Dockerfile
镜像的相关操作
镜像的操作和流程图如下
相关命令
1. 删除镜像
docker rmi [image-name]
1. 删除镜像
docker rmi [image-name]
2. 导出镜像到文件
docker save -o file-name.file_type image@tag
比如
docker save -o nginx.tar nginx:latest
3. 从文件中导入镜像
docker load -i file-name.file_type
比如docker load -i nginx-ubuntu.tar
仓库的相关操作
仓库分为本地仓库和公共仓库,通常是使用公共仓库,除非建立自己的仓库
1. 建立私有仓
docker run -d -p 5000:5000 --restart always --name registry registry:2
2. 推送image
- tag image 的仓库地址为本地仓
docker tag ubuntu localhost:5000/ubuntu
- push tag后的image
docker push localhost:5000/ubuntu
3. 下载image
docker pull localhost:5000/ubuntu
4. 容器数据持久化
- 挂机主机目录
docker run --name xxx -d -v /var/log:/var/log nginx:alpine
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -v /opt/mysql/:/var/lib/mysql mysql:5.7
- 使用valomue卷
docker volume ls
docker volume create vol-name
docker run --name xxx -d -v vol-name:/var/log:vol-name/var/log nginx:alpine
访问case: curl -x http://[localhost|public-ip]:port/v2/ubuntu/tags/list 访问
5. 查看私有仓的images
容器和宿主机的交互
- 文件容器->宿主机
docker cp[operate] file container-name/path
case
docker cp /tmp/test.txt nginx:/tmp
2.容器->宿主机
docker cp container-name/filepath server/path
case
docker cp nginx:/tmp/file.txt ./tmp