docker 学习
什么是 Docker
- Docker 属于「操作系统层面的虚拟化技术」,主要用来对进程进行封装隔离。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- 容器内的应用进程直接运行于宿主机的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便
Docker 的基本概念
-
Docker 镜像
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
-
Docker 容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
Docker Registry
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
Docker 常用命令
# 查看 docker 版本
docker version
# 查看docker系统的信息
docker info
# 日志信息
docker logs
# 查看指定镜像日志(id 为容器 id 或 tag)
docker logs id
# docker 镜像状态检查
service docker status
# 启动关闭docker
sudo service docker start|stop
# 列出所有的container
docker ps -a
# 用一行列出所有正在运行的container(容器多的时候非常清晰)
docker ps | less -S
# 列出最近一次启动的container
docker ps -l
# 删除单个容器
docker rm Name/ID
# 删除所有容器
docker rm `docker ps -a -q`
# 停止、启动、杀死、重启一个容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
docker restart name/ID
# 列出镜像
sudo docker images
-a, –all=false Show all images; –no-trunc=false Don’t truncate output; -q, –quiet=false Only show numeric IDs
# 从dockerhub检索image
docker search image_name
# 下载image
docker pull image_name
# 删除一个或者多个镜像
docker rmi image_name
-f, –force=false Force; –no-prune=false Do not delete untagged parents
# 显示一个镜像的历史
docker history image_name
# 发布docker镜像
docker push new_image_name
docker push dockerhub.yourdomain.com:443/hello.demo.kdemo:v1.0
拉取docker镜像
$docker pull image_name
# 保存对容器的修改
docker commit
# 保存某个容器成为一个镜像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 推送一个容器到中心仓库
docker login --username=[userName] --password=[pwd] [registryURL]
## 建议登录后查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器
docker pull [remoteURL]:[imageTag]
# 对比容器的改动
docker diff
# 附加到一个运行的容器上
docker attach
python 镜像实例构建
在 python 包的目录,运行以下命令上传(companyinternal 为公司内部 pypi )
- python setup.py sdist upload -v -r companyinternal
docker build
- docker build -t harbor.company.com/company/test_object:0.2.3.dev1 .
harbor.company.com/company/ 为公司的 docker 远程仓库地址,「test_object:0.2.3.dev1」为 工程名:版本号
docker push
- docker push harbor.company.com/company/test_object:0.2.3.dev1
docker 查看镜像打包的源文件
docker exec -it e493d4e65146 bash
cd /lib64/python3.4/site-packages/test_object
docker 镜像上传
example:
-
test_object 本地代码提交至test_for_delay分支
-
到某机器对应的 project 的里 git pull,比如到/tmp/test_object下pull代码
-
cd docker后执行命令:
- find test_object/dist/ -name "*.tar.gz" | xargs --no-run-if-empty rm
- (cd test_object && python3 setup.py sdist)
- dist=
ls test_object/dist | tail -n 1
- cp test_object/dist/$dist resources/test_object.tgz
-
通过docker images|grep test_object 获取
-
开始build:
- docker build . -t docker-hub-local.company.com:5000/test_object_delay_test:latest
-
在 a 环境执行:
- docker push docker-hub-local.company.com:5000/test_object_delay_test:latest
-
在 b 环境执行:
- docker pull docker-hub-local.company.com:5000/test_object_delay_test:latest
-
在m环境检查:docker images
参考资料: