美文网首页
Docker浅尝(一)

Docker浅尝(一)

作者: 采风JS | 来源:发表于2018-11-09 12:30 被阅读0次

一 Container和Image

  • Docker底层技术支持
Namespaces:隔离pid/net/ipc/mnt/uts;
Control groups:资源限制;
UnionFileSystem:容器和镜像的分层;
  • Image
Image是文件和meta data的集合,文件为rootfs;
Image分层,且可以共享layer,本身只读;
Image获取 build from dockerfile / pull from registy
  • Container
Container通过Image创建,并在其之上创建一个可读写的ContainerLayer;
Container类似于Image对象的实例,Image负责app的存储和分发,Container负责app的运行;
  • Dockerfile
FROM:为了安全尽量使用官方的Image作为base image
FROM scratch #制作base image 
FROM centos  #使用base image

LABEL:定义Image的mata data
LABEL maintainer="lvzhiweiheal@163.com"
LABEL version="1.0"
LABEL description="This is my email."

RUN:每运行一次生成新的一层
RUN yum update && yum install -y vim \
  python-dev #&&避免分层,\换行

WORKDIR:切换到新目录,尽量使用绝对路径
WORKDIR /test
WORKDIR demo
RUN pwd ##/test/demo

ADD/COPY:COPY优先于ADD,ADD额外解压,远程目录或文件选择curl/wget

ENV:设置环境变量,尽量使用
ENV MYSQL_VERSION 5.6

CMD VS ENTRYPOINT
CMD:
容器启动时默认执行的命令,如果docker run指定其他命令,CMD会被忽略,定义多个CMD,执行最后一个
ENTRYPOINT:
不会被忽略,一定会被执行,让容器以应用程序或者服务的方式执行
  • Container limit
底层通过Control groups限制
--memory
--cpu-shares

二 网络

  • bridge
两个容器之间是通过bridge实现通信的,容器与bridge通过veth实现连接;
容器访问外网是通过bridge和nat实现的;
container1  \
              bridge -- nat -- Internet 
container2  /
  • host
无自己独立的networknamespace,与主机共享相同的networknamespace;
  • none
创建孤立的networknamespace,仅类似下面的方式可以访问;
sudo docker exec -it test1 /bin/sh
  • link
创建container2时,使用--link container1,container2可以代替container1的IP而使用container的名字访问,container1不可反向使用;
容器连接到自定义的bridge上面时,自身具备link功能;
sudo docker network create -d bridge mybridge 
##自定义bridge
brctl show 
##show当前的bridge
sudo docker run -d --name test1 --network my-bridge busybox /bin/sh -c "while true; do sleep 3600; done" 
##创建新容器连接到自定义bridge
sudo docker netwrok inspect my-bridgeID 
##查看某个network的具体信息
  • port map
##将容器的80端口映射到虚拟机的80端口
sudo docker run --name web -d -p 80:80 nginx
  • VXLAN
容器网络通过VXLAN实现,底层称为underlay,上层称为overlay;

三 持久化存储

  • Data Volume
#将Docker hub中mysql的Dockfile中的挂载点更改名称
VOLUME ["/var/lib/mysql"]
sudo docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOQ_EMPTY_PASSWORD=true mysql
  • Bind Mounting
#本机目录和容器目录做映射
sudo docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web lzw/my-nginx

四 Docker Compose多容器部署

  • Docker Compose
Docker Compose是一个工具,通过一条yml文件定义去创建或者管理多个容器
  • docker-compose.yml
##一个yml的案例
version: "3"

services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    enviroment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:
      - my-bridge
  mysql:
    image: mysql
    enviroment:
      - MYSQL_ROOT_PASSWORD: root
      - MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge
volumes:
  mysql-data:
networks:
  my-bridge:
    driver: bridge
  • scale水平扩展和负载均衡
version: "3"

services:
  redis:
    image: redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ##因实现水平扩展不能转换端口
    enviroment:
      REDIS_HOST: redis
  lib:
    image: dockercloud/haproxy
    links:
      - web
    ports:
      - 8080:80
    volumns:
      - /var/run/docker.sock:/var/run/docker.sock

相关文章

  • Docker浅尝(一)

    一 Container和Image Docker底层技术支持 Image Container Dockerfile...

  • 浅尝docker

    作者:拔剑少年简书地址:https://www.jianshu.com/u/dad4d9675892博客地址:ht...

  • 002--【docker】镜像制作

    1、写在前面的话 学习整个docker的环境,网络,原理,而不是浅尝辄止的docekr run一个镜像,然后就装着...

  • 001--【docker】基础知识入门

    1、写在前面的话 学习整个docker的环境,网络,原理,而不是浅尝辄止的docekr run一个镜像,然后就装着...

  • Linux服务器docker初体验

    去年开始接触docker容器,当然只是处于一个观望的状态。今年有幸开始进行浅尝,特将过程记录下来,供自己以及将要使...

  • 浅尝

    昨天夜里,失眠,拿起手机看了电影《七月与安生》,看完,便在沉沉的思虑中渐渐睡去 于是我也便就更喜欢改编版的电影里安...

  • 浅尝

    格子间里的人们终于在夜幕的催促下离开了白昼的战场,又急匆匆的淹没在华灯初上的车水马龙中。长长来路打翻万般思绪,风拂...

  • 浅尝

    今天在那刷网课,我妈过说这课挺有意思的,你认真听。突然想起我爸也说过类似的话。他们好像总和我不在一个频道上。 其实...

  • 浅尝

    从开始动手练习画画后,线描,水彩都尝试了,这两天听一个免费的国画体验课,因为太忙,只能放着听听,偶尔誊出手来截个屏...

  • 浅尝

    有一次表演,小丑不小心从舞台上摔下来,牙齿被摔掉了很多颗。他满脸是血,由于疼痛,表情显得有些扭曲。全场观众大笑,因...

网友评论

      本文标题:Docker浅尝(一)

      本文链接:https://www.haomeiwen.com/subject/sibnxqtx.html