首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker制作流程及注意事项

Docker制作流程及注意事项

原创
作者头像
laod_wh
修改2020-06-19 12:03:46
修改2020-06-19 12:03:46
1.3K0
举报
文章被收录于专栏:Docker-laodDocker-laod

1. Docker基础命令

1.1. 镜像相关

l 列举本机镜像

代码语言:txt
复制
docker images

docker image ls

l 删除镜像

代码语言:txt
复制
docker image rm 镜像名

l 拉取镜像

代码语言:txt
复制
docker pull 镜像名:[tag]

docker pull tomcat

docker pull mysql:5.5

l tag镜像

代码语言:txt
复制
docker tag 镜像名  新镜像名:[tag]

l 推送镜像

代码语言:txt
复制
docker push 本地镜像  远程镜像

【注意】

同一个镜像tag多次,拥有多个tag,并不会占用多份存储空间;

多个镜像,如有公用的layer,公用的layer并不会占用多份存储空间;

存在无引用的tag问题,建议只有在不需要用到此镜像时,才删除此镜像,但不要删除tag标签。

1.2. 容器相关

l 列举本机容器

代码语言:txt
复制
docker container ls

docker container ls -a

l 停止运行中的容器

代码语言:txt
复制
docker container stop 容器名

l 启动停止的容器

代码语言:txt
复制
docker container start 容器名

l 删除容器(如果运行中,需要停止)

代码语言:txt
复制
docker container rm 容器名

l 重启容器

代码语言:txt
复制
docker container restart 容器名

【注意】

容器停止,并不会自动删除,仍会占用存储空间。建议及时删除不需要的容器。

删除容器,并不会删除映射出来的文件,但会删除所有未映射出来的文件,即容器本身是无状态的。

1.3. 运行相关

运行某个镜像(生成一个新的容器)

代码语言:txt
复制
docker run 参数  镜像  命令

具体参数参考帮助,常用的有:

代码语言:txt
复制
-d -it --name -p --rm --restart=always

运行容器内的命令(进入容器内部)

代码语言:txt
复制
docker exec -it [容器名] [容器内的命令]

例如:

代码语言:txt
复制
docker exec -it containername /bin/sh

运行容器内的命令(运行完直接退出)

代码语言:txt
复制
docker exec [容器名] [容器内的命令]

例如:

代码语言:txt
复制
docker exec containername ping www.baidu.***

打印容器日志:

代码语言:txt
复制
docker container logs [容器名]

docker --help

docker container --help

2. 镜像本地生成及推送

2.1. 准备:

将jar包、yml文件等拷贝至源目录;

当前定义的源目录为:

trunk/开发库/文档/60 转产/部署/dockerfile/imas/admin/

【禁止】

yml配置文件中禁止写死环境相关的IP,所有环境相关的IP需要使用域名;

即发布的yml配置文件,即使不做映射,也可以通过编排docker-compose.yml文件正常启动。

2.2. 修改信息:

修改Dockerfile文件:

*#version行,填写对应的版本信息,版本保持与tag一致;

*#release date行,填写生成的日期;

*#change log行:仅alpha、beta版本要求,填写上一版到本版本所有修改的内容,来自于SVN;

*#build行:修改对应的版本信息;

*#tag行:修改对应的版本信息;

*#push行:修改对应的版本信息;

*LABEL行:如需要则做对应的修改;

其他内容:如需要则做对应的修改;

修改build.bat文件:

该文件可自行本地管理,排除在SVN文件之外。

主要修改tag文件、登录用户名。

2.3. 生成:

本地目录运行 build.bat命令,全部正确运行后,生成完毕,且已经推送到阿里云。

3. 调试

3.1. 拉取最新镜像

虽然docker有机制可以自行更新镜像,但建议在调试非自己的镜像前,显示更新镜像。

  1. 登录阿里云Docker Registry$sudo docker login --username=[dailong]@****** registry******aliyuncs.***2. 从Registry中拉取镜像$sudo docker pull registry******aliyuncs.***/***/[worker]:[镜像版本号]3.2. 集群调试

3.2.1. 修改集群文件

集群文件存储在:

trunk/开发库/文档/60 转产/部署/dockerfile/imas/yml/docker-compose.yml

典型需要修改集群文件的场景如下:

需要修改运行的镜像,包括tag值,修改【image】值;

需要修改运行镜像的各参数,例如命令、映射目录、端口等;

需要修改运行镜像的数量;

【注意】

修改集群文件后,必须重新部署/更新服务,才会生效,使用【3.2.3 部署/更新服务】中的命令。

重新部署/更新服务后,所做的修改将自动应用。

3.2.2. 初始化集群

代码语言:txt
复制
$docker swarm init

一般每台机器只需要操作一次。

3.2.3. 部署/更新服务

代码语言:txt
复制
$docker stack deploy -c docker-compose.yml ima-client

如集群上有服务,且服务名相同,则更新服务;

如集群上无无法,或服务名不同,则新建服务;

目前规定的服务名为:

服务端:ima-server

客户端:ima-client

3.2.4. 停止服务

代码语言:txt
复制
$docker stack rm ima-client

3.2.5. 列举服务

代码语言:txt
复制
$docker service ls

结果如下

1.png
1.png

其中,关注NAME、REPLICAS、PORTS。

3.2.6. 查看服务进程

代码语言:txt
复制
$docker service ps ima-server_ima-api
2.png
2.png

其中,关注DESIRED STATE,CURRENT STATE,ERROR。

3.2.7. 查看日志

代码语言:txt
复制
$docker service logs -f --tail 100 ima-server_ima-api

3.2.8. 更新容器

更新容器包括如下情况:

相同tag的镜像有更新,最典型的是latest标签,经常会有更新,需要pull后更新容器;

镜像无更新,但映射到镜像的文件有更新,例如jar包,application.yml;

可以直接stop对应的容器,集群检测到容器掉线后,会自动启动容器。

stop容器的方法为:

代码语言:txt
复制
$docker container ls

$docker container stop [容器名]

$docker container rm [容器名]

4. 阿里云操作流程

4.1. 登录控制台

登录地址为:

代码语言:txt
复制
http://signin.aliyun.com/******/login.htm

用户名:分配的用户名@**

密码:单独分配。

初次登录时需要修改密码。

4.2. 容器镜像服务管理控制台

左侧导航栏选择《容器镜像服务》;

左上方《管理控制台》选择《华北2(北京)》;我们所有资料均存放在北京机房,选错机房将无法看到镜像。

容器镜像服务中,关注《镜像仓库》标签,其中包括了我们IMA所使用的三个镜像,后续如有新增,将会做对应的增加。

右上方《设置Registry登录密码》可以自行设置登录密码,设置以后,使用docker login命令后需要使用该密码。

关注每个容器的《管理》页面,其中将有登录Registry、更新、push等命令。

3.png
3.png

【禁止】

禁止删除、管理后修改已经登记的镜像(IMA*开头的镜像),只允许推送被允许Tag的版本。

【可以】

可以创建自己的镜像仓库,自己创建的镜像仓库可自行删除、修改。

4.3. 镜像操作指南

在上述页面进入管理页面后,有详细命令。

1. 登录阿里云Docker Registry

代码语言:txt
复制
$sudo docker login --username=[dailong]@****** registry******aliyuncs.***

2. 从Registry中拉取镜像

代码语言:txt
复制
$sudo docker pull registry******aliyuncs.***/newott/worker:[镜像版本号]

3. 将镜像推送到Registry

代码语言:txt
复制
$sudo docker login --username=[dailong]@****** registry******aliyuncs.***

$sudo docker tag [ImageId] registry******aliyuncs.***/newott/worker:[镜像版本号]

$sudo docker push registry******aliyuncs.***/newott/worker:[镜像版本号]

【禁止】

禁止Tag Latest标签,该标签后续仅用来Tag“经过测试的、可发行的版本”;

【注意】

Tag标签遵循如下规则:

l test**;hy**;dl**;zcg**:由个人自行生成并临时性测试的tag,个人随意生成、管理、删除,系统不定期清理;镜像中Label标签信息将被忽略;

l alpha****:内部测试版本,部署在40、41环境上,由开发人员测试完毕后,提交SVN、版本修改说明,发布数据库升级脚本,获取版本号后生成。Alpha版本长期保留。Alpha版本每周一个。例如,1019日发布为alpha0.7;1026日发布为alpha0.8;1019~1025期间发布的小版本依次为alpha0.7.1等;镜像中Label标签信息需要填写maintainer="上传人" innerversion="版本号";其中,innerversion保持内部唯一;

l beta****:外部测试版本,正式发行前的试用版本,当前保留,后续部署在百度云上,和正式环境并列;镜像中Label标签信息需要按照规定填写maintainer="上传人" innerversion="版本号";beta版本一般是从alpha版本候选得到;

l 无前缀修饰:正式发行的版本,从beta版本候选得到;


代码语言:txt
复制
docker ps // 查看所有正在运行容器 
docker ps -a // 查看所有容器,包括未运行的容器
docker exec -it containerId  bash //进入容器 退出 exit
docker ps -a -q // 查看所有容器ID 
docker stop containerId  // containerId 是容器的ID 
docker stop $(docker ps -a -q)  //  stop停止所有容器 
docker rm containerId   //删除容器
docker rm $(docker ps -a -q)  //  删除所有容器

问题记录:

1:docker部署mongo时报错:Operation not permitted

代码语言:txt
复制
chown: changing ownership of '/data/db/diagnostic.data/._metrics.2019-11-25T12-01-31Z-00000': Operation not permitted
chown: changing ownership of '/data/db/._collection-0--8819006777120270209.wt': Operation not permitted
chown: changing ownership of '/data/db/._collection-0-4823979033388143198.wt': Operation not permitted
chown: changing ownership of '/data/db/._collection-2--8819006777120270209.wt': Operation not permitted
chown: changing ownership of '/data/db/._collection-2-4823979033388143198.wt': Operation not permitted
chown: changing ownership of '/data/db/._collection-4--8819006777120270209.wt': Operation not permitted
chown: changing ownership of '/data/db/._collection-8--8819006777120270209.wt': Operation not permitted

因为我使用的移动硬盘做的持久化,需要做如下操作

代码语言:txt
复制
创建Volume虚拟磁盘:docker volume create --name <名称>
删除Volume虚拟磁盘:docker volume rm <名称>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Docker基础命令
    • 1.1. 镜像相关
    • 1.2. 容器相关
    • 1.3. 运行相关
  • 2. 镜像本地生成及推送
    • 2.1. 准备:
    • 2.2. 修改信息:
    • 2.3. 生成:
  • 3. 调试
    • 3.1. 拉取最新镜像
      • 3.2.1. 修改集群文件
      • 3.2.2. 初始化集群
      • 3.2.3. 部署/更新服务
      • 3.2.4. 停止服务
      • 3.2.5. 列举服务
      • 3.2.6. 查看服务进程
      • 3.2.7. 查看日志
      • 3.2.8. 更新容器
  • 4. 阿里云操作流程
    • 4.1. 登录控制台
    • 4.2. 容器镜像服务管理控制台
    • 4.3. 镜像操作指南
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档