docker 学习

什么是 Docker

  1. Docker 属于「操作系统层面的虚拟化技术」,主要用来对进程进行封装隔离。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
  2. 容器内的应用进程直接运行于宿主机的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便

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


参考资料:

posted @ 2018-10-15 18:10  深圳-随风  阅读(162)  评论(0编辑  收藏  举报