/ DOCKER

docker使用总结

一. 定义

Docker的特点:

  • 是一个工具,能快速方便的创建、运行、部署软件。
  • 能将一个软件及其依赖打包成一个单独的库,方便移植。
  • 能解决不同application之间版本不兼容的问题(比如一个是python2环境,一个是python3环境)
  • 相较于虚拟机更为轻量,占用资源少,资源利用率高,运行速度快。

Docker的应用:

  • 提供一次性的环境
  • 可组建微服务架构,大程序更方便扩容、稳定。

二. docker使用流程

2.1 docker的流程

整个docker的使用流程基本是:编写docker file ==> 创建image(镜像) ==> 实例化为container(容器) ==> 跑container。

2.2 拉取使用的例子

这里用的是doccano这个NLP文本标注工具作为例子,记录下docker在使用该镜像时遇到的问题和总结。

使用过程常用的命令:

  1. 拉取官方的一个doccano镜像:docker pull doccano/doccano
  2. 查看本地镜像列表:docker image list
  3. 将镜像实体化为容器:docker container create --name doccano -e "ADMIN_USERNAME=admin" -e "ADMIN_EMAIL=admin@example.com" -e "ADMIN_PASSWORD=password" -v doccano-db:/data -p 8000:8000 doccano/doccano
  4. 容器跑起来:docker container start doccano
  5. 查看docker的容器(在跑)列表:docker container ls
  6. 查看docker的容器(包含在跑/退出)列表:docker ps -as
  7. 查看运行日志:docker logs 上面查询到的容器的id
  8. 关闭指定的容器:docker container kill 容器的id
  9. 删除指定的容器:docker container rm 容器的id
  10. 进入到指定的容器中:docker exec -it 容器的id /bin/bash

三. 创建自己的docker

3.1 创建docker的镜像

下面用简单的python脚本构建镜像(必须包含dockerfile文件和python脚本文件)。下面是整个项目的目录:

├── Dockerfile # Dockerfile文件
└── hello.py  # python脚本:功能打印N行helloworld,N是命令行参数

其中Dockerfile文件的内容如下:

FROM python:3.9 
COPY ./hello.py /hello.py
ENTRYPOINT ["python3", "hello.py"]
CMD ["3"]
  • 如果是正常启动python脚本应该是:python3 hello.py 3 ,这里的3是打印多少行的参数。这里的CMD[“3”] 指的是其后面的参数设定,默认是3。

  • 创建docker镜像:docker build . --tag helloworld
  • 跑镜像:docker run helloworld 10 (这里跑10次hello world) 注意这里如果跑实例的时候,下面删除镜像的时候会冲突,需要删除这里跑起来的实例

3.2 搭建并推送到本地的docker registry

我们可以将自己创建好的docker放到docker仓库中,也就是dockerhub中。当然也可以从dockerhub拉取别人的image。

  • 拉取docker官方的私有仓库镜像:docker pull registry
  • 创建一个docker仓库:docker run -d -p 5050:5000 registry
  • 将自己的镜像重新tag标记下镜像:docker tag helloworld localhost:5050/my-helloworld
  • 镜像推送到本地仓库中:docker push localhost:5050/my-helloworld
  • 可以将本地的helloworld和localhost:5050/my-helloworld镜像删除:docker rmi helloworld localhost:5050/my-helloworld
  • 然后再从本地的私有仓库中拉取镜像:docker pull localhost:5050/my-helloworld

3.3 推送镜像到docker hub

docker hub我们可以理解为一个云仓库,可以和github上类似,用以在远程仓库上存储自己的镜像,方便我们随时拉取。

这里我们需要在dockerhub的官网上进行注册,然后创建属于自己的私有远程仓库。如下所示

之后我们就可以将自己的镜像上传到dockerhub远程仓库中了。

  • 在docker的destop上登陆自己的id,这样才能推到远程仓库。
  • tag标记下自己本地仓库和远程仓库的映射:docker tag localhost:5050/my-helloworld siwangtt/test-repo
  • 推送到dockerhub远程仓库中:docker push siwangtt/test-repo

至此,我们就可以在dockerhub上看到我们刚刚上传的镜像咯。