docker知识点总结

接触docker差不多一个半月,下面是对一路docker学习的总结。本文重在总结知识点,但每个点的不会讲的太细。

1. docker是什么?

Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。假设你写的某个代码依赖了很多三方库,甚至mysql等多个数据库,那么通过docker可以快速的把代码部署到目标机器而节省了环境搭建的环节。

2. linux下安装docker

wget https://get.docker.com -O docker.sh
sudo bash docker.sh
# 推荐设置添加镜像源,否则可能出现docker pull时失败的情况。
echo "DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"" | sudo tee -a /etc/default/docker

这是官网推荐的安装脚本,会自动安装docker-ce的最新稳定版本。支持常见的很多发行版,比如centos7,fedora,debian,ubuntu等。详情看docker.sh那个脚本。

3. Dockerfile

ddocker build配合Dockerfile生成镜像,生成的镜像可以用于发布到网上传播,比如hub.docker.com中就有很多编译好的docker镜像。下面展示最简单的hello world的镜像如何生成,注意一点后面docker build时会尝试将当前文件夹下所有内容发送到docker服务作为上下文,所以建议单独新建一个文件夹,并在其中新建一个文件名为Dockerfile,填入以下内容:

 # 下面内容会基于bionic版本的ubuntu作为基础镜像
FROM ubuntu:bionic   
MAINTAINER spring
# 每个docker镜像需要一个入口点,也就是运行时运行的程序
ENTRYPOINT ["/bin/echo", "Hello world"]   

后面通过docker build编译,通过docker run运行:

[root@centos hello]# sudo docker build -t hello .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM ubuntu:bionic
 ---> ea4c82dcd15a
Step 2/3 : MAINTAINER spring
 ---> Running in dc34172ee1bb
Removing intermediate container dc34172ee1bb
 ---> 1898011b7a45
Step 3/3 : ENTRYPOINT ["/bin/echo", "Hello world"]
 ---> Running in 52c83794a370
Removing intermediate container 52c83794a370
 ---> 33c4e1f5d398
Successfully built 33c4e1f5d398
Successfully tagged hello:latest
[root@centos hello]# sudo docker run hello
Hello world

但是事实上Dockerfile能定义的东西有很多,比如当我使用mysql镜像时,我需要传入宿主机的某个文件夹做用于存放数据库真实数据,此时需要VOLUME指令。同时mysql是需要供别的服务使用的,此时就需要EXPOSE开放指定端口。下面的Dockerfile是我项目中实际在使用的(不要尝试编译这份配置,只是做个示范):

FROM ubuntu:bionic
MAINTAINER spring

USER 0
COPY libcrypto.so.1.1 /usr/local/lib/
COPY config.json /app/
COPY server /app/
RUN  ldconfig
VOLUME ["/mnt/data","/data"]
EXPOSE 80
WORKDIR "/app"
ENTRYPOINT ["/app/server"]

4. docker镜像与docker容器

docker镜像的获得有多种方法:

  1. 如果公司内部有docker仓库,则使用docker login登陆,并使用docker pull获取镜像。
  2. docker官方提供一个公共仓库: hub.docker.com,在这个网站找到想要的镜像后不需要login可以直接pull。
  3. 使用docker build构建属于自己的镜像。
    docker images命令可以查看本地已有的docker镜像。这里image概念如同OOP中的class,当需要使用某个镜像时需要将类实例化,也就是这里的docker create命令,就得到了container(容器)。针对docker 容器常见的操作有docker start,docker stop,docker rm等。但在很多情况下,使用docker create之后都希望立即启动它,所以就有了docker run,它相当于docker createdocker start的合并。

5. docker-compose服务编排

docker-compose的出现只怪上面的docker命令太难搞了,特别对于有对于多个服务要一起启动时就更崩溃了。但是在我实践过程中发现,除了hello world这种不用带任何参数的docker可以一行一行敲以外,其他容器都会有文件夹映射,端口映射等很多其他参数,在这种情况下你使用docker run就想直接找块豆腐撞死。
docker-compose的安装:

url="https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)"
sudo wget "$url" -O /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

示范一个项目中正在使用的docker-compose.yml配置文件:

version: "3"
services:
    evidence:
        container_name: server
        image: "xxxxxx:1.0"
        volumes:
          - /data:/data:rw
        ports:
          - "80:80"
        environment:
          - TOKEN_URL=http://192.168.1.2
          - DATA_DIR=/data
        restart: always

总的概念上讲与上面的Dockerfile类似,只是换了一下语法,后续就可以通过docker-compose up -d启动服务并放置于后台运行,通过docker-compose down停止这些服务。当然docker-compose的功能远远不止如此,项目中常用的还有depends_on控制关联服务器的启动,使用networks将各个服务置于一个网段,也可以给每个容器配置静态ip地址等等。

6.知识点总结

1.linux中docker的安装(务必不要使用snap版本的docker,有深坑!!!!)
2.使用Dockerfile编译自己的docker镜像
3.docker基本概念:仓库,镜像,容器。docker常用命令: create,start,stop,rm,rmi,run,logs,inspect等等。
4.使用docker-compose部署docker服务。尽量使用environment传递参数,不要使用config文件再映射到容器的做法。

2019年1月23日更新(docker镜像中文乱码):

  1. 以debian:9这个docker镜像为例,默认情况下无法输入中文而且显示中文乱码,此时在构建镜像时需要在Dockerfile里面添加:ENV LANG C.UTF-8 ,即可解决中文乱码问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351