首页 > 其他 > 详细

docker 容器

时间:2019-04-29 19:48:24      阅读:180      评论:0      收藏:0      [点我收藏+]

docker 容器

  • linux docker学习之 三大概念

    1.镜像 老板卖的镜像光盘 理解为python的 类

    2.容器 基于镜像,运行出的容器实例 理解为python类的实例化

    3.仓库 存放docker镜像的

    容器是 基于镜像运行的
    • 一对多关系

github 对外的公网代码仓库
gitlab 企业私有的代码仓库

docker hub 托管docker镜像的公网仓库
docker私有仓库

docker ce 社区免费版
docker ee 企业收费版

docker 配置及使用

  1. 下载docker软件,在centos7中使用

1.yum
-选择阿里云的yum仓库 安装docker
由于网速问题,使用阿里云的仓库
-centos7 官方自带的 yum仓库
-docker 公司自己也有最最正确的安装方式,提供了yum源下载
2.下载docker ,基于阿里云的yum仓库
yum install docker -y

3.配置docker的镜像加速器
加速器修改的其实是这个文件 /etc/docker/daemon.json
加速器创建命令如下:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

4.重启docker服务
需要提前修改一个配置文件,才能重启
[root@s16ds ~]# cat /etc/docker/daemon.json
去掉{}里面的逗号就行
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
5.重启docker服务
systemctl restart docker

学习docker命令

  • docker pull hello-world #下载镜像 hello-world
    docker run hello-world #运行镜像,产生容器实例

    备注

    docker run 运行一个镜像,如果这个镜像不存在,自动也会下载

    docker save centos > /opt/centos.tar.gz #导出系统当前docker镜像
    docker load < /opt/centos.tar.gz #导入一个docker镜像(模拟发送给同事)

    docker run -it centos /bin/bash #运行centos进行,且以交互式形式,进入centos容器当中
    -i 交互式操作
    -t 开启一个终端提供访问
    centos 镜像名
    /bin/bash 指定容器运行shell解释器

    docker run -it ubuntu /bin/bash #运行一个ubuntu容器
    docker run -d centos /bin/sh -c "while true;do echo 好嗨哦; sleep 1;done"
    -d 后台运行
    -c "while true;do echo 好嗨哦; sleep 1;done" #后台运行一个shell脚本

  • 删除镜像前,需要确保这个镜像,没有依赖的容器记录

    docker rm 容器id
    docker rmi 镜像id
    docker rmi -f 镜像id #强制性删除镜像,跳过容器记录
    docker rm docker ps -aq #一次性删除所有容器记录 #慎用!!!!!!!!!!!!!!!!!!!!!!!!!!!
    docker rmi docker images -aq #一次性删除所有镜像记录 #慎用!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • docker image ls #查询当前机器的镜像
    docker images #同上
    docker container ls #查看正在运行的容器记录

    容器运行的要点:

    • docker容器 必须有后台进程在运行,否则容器就挂掉

    docker ps -a #所有运行过的容器记录
    docker search hello-world #查询docker镜像,默认去docker hub搜索镜像
    docker logs -f 容器id #实时打印容器内的日志
    docker stop 容器id #停止正在运行的容器记录
    docker start 容器id

提交容器记录

  • 提交自己的容器记录,产生新的镜像文件,可以发送给其他人用
  1. 运行一个centos容器记录,此时没有vim工具
    docker run -it centos /bin/bash
  2. 退出容器,提交这个容器记录
    docker commit 1be zhangfei/centos-vim
  3. 检查容器镜像
    docker images
  4. 提交这个镜像到docker hub
    1.登录docker hub
    docker login
    2.登录后,推送这个镜像,到docker hub
    docker push yuchao163/s16-centos-vim
    3.推送到docker hub公网后,就可以提供公网镜像下载了
    docker pull yuchao163/s16-centos-vim

容器端口映射的学习:

  1. 通过一条命令,运行一个python web容器
    docker run -d -P training/webapp python app.py
    -d 后台运行参数
    -P 随机端口映射, # 宿主机的一个随机端口:映射到容器内暴露的端口 (8000)
    training/webapp #运行的镜像名
    python app.py #运行容器内的一个app.py脚本文件

如果我们想自定制一个 flask web容器

  1. 指定一个系统支撑
    FROM cenots

学习dockerfile

  • FROM指令就是 指定哪一个系统,为基础镜像

    FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
    FROM centos #使用base image
    FROM ubuntu:14.04 #带有tag的base image

    LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
    LABEL maintainer=“yc_uuu@163.com"

  • RUN这个指令是万能指令,你写什么,docker构建时,就执行什么

    对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!

    RUN yum update && yum install -y vim Python-dev #反斜线换行
    RUN /bin/bash -c "source $HOME/.bashrc;echo ?$HOME”

  • WORKDIR

    WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
    WORKDIR /test #如果没有就自动创建
    WORKDIR demo #再进入demo文件夹
    RUN pwd #打印结果应该是/test/demo

    ADD and COPY
    ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
    ADD test.tar.gz / #ADD指令除了有拷贝资料到容器的作用,还有解压的作用

    COPY hello test/ #等同于上述ADD效果

    ADD与COPY

    • 优先使用COPY命令
  • ADD除了COPY功能还有解压功能

添加远程文件/目录使用curl或wget

ENV #环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 #设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}”

ENV指令,用于定义一个变量

ENV django_version="1.5"
pip3 install django==django_version
pip3 install django==django_version
pip3 install django==django_version
pip3 install django==django_version
pip3 install django==django_version
pip3 install django==django_version

EXPOSE 8080 #dockerfile的 expose参数,暴露容器的8080端口,提供给外部机器访问

构建一个dockerfile 与flask web应用,且外部客户端可以访问

  1. 创建一个flask 代码文件

?
? [root@s16ds mydocker]# cat s16-flask.py
? #coding:utf8
? from flask import Flask
? app=Flask(name)
? @app.route(‘/‘)
? def hello():
? return "

干干巴巴 麻麻赖赖的

"
? if name=="main":
? app.run(host=‘0.0.0.0‘,port=8080)

  1. 创建dockerfile,内容如下

  • 你要确保 s16-flask.py 与dockerfiel在同一个目录

      [root@s16ds ~]# cat /opt/mydocker/Dockerfile 
      FROM centos
      COPY /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/
      COPY /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/  
      RUN yum clean all 
      RUN yum install python-setuptools  -y
      RUN easy_install flask
      COPY  zf-flask.py  /opt/
      WORKDIR  /opt
      EXPOSE 8080
      CMD ["python","zf-flask.py"]
  1. 构建打包这个dockerfile,生成一个自己的镜像

    docker build -t yuchao163/s16-flask-docker .
    -t 指定镜像的版本名
    . 找到当前路径的 Dockerfile

  2. 基于这个自己构建的镜像,运行处一个flask web容器

    docker run -d -p 8888:8080 77b
    -d 后台运行
    -p 指定端口映射 宿主机的8888映射到容器的8080
    77b 是自己构建的镜像id

  3. 查看容器的端口转发情况

docker port  容器id 

docker私有仓库的搭建:

  1. 下载一个私有仓库的镜像,基于这个镜像生成docker仓库容器
    docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

    参数解释

    ? -v 数据卷挂载,目录映射
    ? -v /opt/data/registry:/var/lib/registr
    ? -p 5000:5000

  2. 修改docker的配置文件,支持http方式的推送
    vim /etc/docker/daemon.json
    修改如下参数

    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
    "insecure-registries":["192.168.15.55:5000"]
    }
  3. 修改docker的启动服务命令,支持读取这个/etc/docker/deamon.json文件

    1. 编辑这个文件/lib/systemd/system/docker.service
      vim /lib/systemd/system/docker.service

    2. 找到[service]这一行,添加如下参数,和我的一样就行
      EnvironmentFile=-/etc/docker/daemon.json

    [Service]
    Type=notify
    NotifyAccess=main
    EnvironmentFile=-/run/containers/registries.conf
     EnvironmentFile=-/etc/docker/daemon.json    #加入这个就行!!!!!!!!!!!!!!!!
    EnvironmentFile=-/etc/sysconfig/docker
    EnvironmentFile=-/etc/sysconfig/docker-storage
  4. 重新读取docker 配置文件
    systemctl daemon-reload

  5. 重启dockfer服务
    systemctl restart docker

  6. 由于重启了docker ,docker进程都挂掉了
    重新运行一个新的私有仓库,命令如下
    docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
    参数解释:
    --privileged=true docker容器的安全机制:设置特权级运行的容器

  7. 推送本地镜像到私有仓库中

    1.修改本地镜像的tag标记号,指定私有仓库的地址传输
    docker tag docker.io/hello-world 192.168.15.71:5000/s16-old-docker

    2.推送到私有仓库
    docker push 192.168.15.71:5000/s16-old-docker

?

  1. 通过私有仓库的api,检查镜像数据
    可以通过浏览器,访问aip数据
    http://192.168.15.55:5000/v2/_catalog

  2. 此时可以通过 私有仓库下载,公司内部的镜像了
    docker pull 192.168.15.55:5000/s16-old-docker-heheheheheheh

dockfile

  1. 指定系统自带的centos
  2. 更换阿里的yum源
  3. 下载easy_install工具 ,安装flask模块
  4. 指定代码

查看发行版:

cat /etc/os-release

解决网速问题:

  • 修改dns 服务器 vim /etc/resolv.conf

docker 容器

原文:https://www.cnblogs.com/zhang-zi-yi/p/10792339.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!