三分钟轻松搞定docker,建议收藏

举报
香菜聊游戏 发表于 2021/09/23 18:04:50 2021/09/23
【摘要】 做了好久的游戏,感觉和外面的技术有点脱节,游戏公司的技术基本上都是固定的,因为生产效率第一,所以更新换代比较慢。作为一个程序不能停止学习,因为停止学习就会被社会抛弃,今天聊一下docker ,这个现在比较火的交付容器技术。还不赶紧学起来。1、docker 是啥1.1 docker概念Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任...

做了好久的游戏,感觉和外面的技术有点脱节,游戏公司的技术基本上都是固定的,因为生产效率第一,所以更新换代比较慢。作为一个程序不能停止学习,因为停止学习就会被社会抛弃,今天聊一下docker ,这个现在比较火的交付容器技术。还不赶紧学起来。

1、docker 是啥
1.1 docker概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

换句人话说docker 就是在部署的时候屏蔽环境细节的一个环境。

1.2 docker 和虚拟机的区别
docker 是更轻量级的虚拟机,就是一个软件,更节省系统资源

Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的运行环境,总是能以相同的方式运行。就好像 Java 虚拟机一样,“一次编写,到处运行(Write once, run anywhere)”,而 Docker 是“一次构建,到处运行(Build once,run anywhere)

1.3 docker 的架构
client 就是我们发送命令的地方,也是我们常操作的地方

docker host 就是我们服务器上的容器,也是app 运行的地方

registry 就是存放app 的地方,可以搭建私有的仓库,官方的Docker hub是一个用于管理公共镜像的好地方。

1.png

2、dockerfile 制作
dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Docker通过读取Dockerfile中的指令自动生成映像。

Dockerfile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

Dockerfile文件说明

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

2.png

# 基础镜像
FROM java:8
# 默认工作空间
VOLUME /tmp
WORKDIR /opt/his
# 复制为ecard
ADD target/server-adapter-0.0.1-SNAPSHOT.jar /opt/his/server-adapter.jar
ADD run.sh /opt/his/run.sh
​
RUN bash -c 'touch /server-adapter.jar'
# 时钟
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#暴露端口对外
EXPOSE 9083
EXPOSE 9081
#执行 脚本
ENTRYPOINT ["bash","/opt/his/run.sh"]


3、常用的docker命令
docker ps 列出容器

3.png

配合 grep 使用,查出自己的app的容器id :d4f5ae7107f3

docker inspect : 获取容器/镜像的元数据,可以查看自己配置的环境变量和挂载的目录

docker top :查看容器中运行的进程信息,支持 ps 命令参数。

docker logs -f 跟踪日志输出

docker exec :在运行的容器中执行命令 docker exec -it cid bash

docker cp :用于容器与主机之间的数据拷贝 docker cp src dest

docker rm :删除一个或多个容器。 -f 强制删除一个运行中的容器 docker

docker start :启动一个或多个已经被停止的容器

docker stop :停止一个运行中的容器

docker restart :重启容器

docker images 来列出本地主机上的镜像

-v 挂载的只能

有几点需要注意:

host机器的目录路径必须为全路径(准确的说需要以/或~/开始的路径),不然docker会将其当做volume而不是volume处理

如果host机器上的目录不存在,docker会自动创建该目录

如果container中的目录不存在,docker会自动创建该目录

如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉

volume也是绕过container的文件系统,直接将数据写到host机器上,只是volume是被docker管理的,docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes。

将my-volume挂载到container中的/mydata目录:

4、一个例子
下面是一个在公司使用的启动脚本,主要做了几件事情

注入环境变量

挂载目录

暴露端口

设置文件镜像

66666.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。