linux docker容器使用

docker

相当于在进程上,披着一个马甲,其实就是在一个单独的linux系统上

解决了什么?

  1. 操作系统不一样
  2. 各种平台组件的一致性 比如 开发环境的python3 线上环境的python3
  3. 环境配置问题,运行一个crm,可能要解决很多依赖关系,才能运行
  4. 解决pip的依赖包,linux的PATH环境变量等等

有没有办法将本地的开发代码,和环境全部切换带服务器上呢?

  1. vmware 虚拟机的克隆
    占资源、启动慢
  2. docker容器技术
    将你的应用程序,和代码,全部打包在一个系统镜像中内,(docker image)
    可以保存环境的一致性

docker的三大概念

  1. 容器 container
  2. 镜像 image 系统镜像
  3. 仓库 存放镜像的地方

docker的安装方式

  1. yum源安装, 必须指定yum源, yum源大致分为 contos官网, 阿里云这样的第三方源, docker官方源(一般生产环境使用docker官网的)
  2. 获取docker 社区版 CE 企业版EE

docker官网文档

  1. 选择阿里云的安装
yum install docker-server docker -y
  1. 启动docker服务端
systemctl start docker  # 启动docker
systemctl stop docker  # 停止docker

linux 登录 dockerhub

docker login
# 输入账号
# 输入密码

docker 的生命周期

命令函数

docker 加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

# 运行完会返回信息
# docker version >= 1.12
# {"registry-mirrors": ["http://95822026.m.daocloud.io"],}
# Success.
# You need to restart docker to take effect: sudo systemctl restart docker

# 修改配置文件
vim /etc/docker/daemon.json

{"registry-mirrors": ["http://95822026.m.daocloud.io"]}  # 去掉结尾的 “,”逗号
  • 增加 镜像
# 获得一个 docker镜像, 获取一个ubuntu镜像

# 获取一个hello-word 镜像, 默认去docker hub 搜索docker镜像
docker search hello-world  # 搜索
dicker pull hello-world  # 下载镜像
  • 运行 下载的docker 镜像实例
docker run hello-world
exit  # 退出交互模式

docker run -it ubuntu /bin/bash  # -i交互式的运行镜像 -t开启一个终端terminal 使用镜像的 /bin/bash 命令
docker run --name docker容器的自定义进程名字 -d centos /bin/sh -c "while true;do echo 买了佛冷;sleep 1;done"

# 容器内的端口映射
docker run -d -p 8080:5000 training/webapp python app.py
        # -d 后台运行
        # -P 大写的P 随机的端口映射  宿主机端口:容器内的端口  可不用跟 8080:5000
        # -p 小写的p 指定端口映射  宿主机的8080 : 5000  5000 是docker容器代码内开启的端口号
        # training/webapp  镜像的名字
        # python app.py 容器要执行的命令
  • 修改
docker exec -it 容器id /bin/bash  # 进入容器

# 修改镜像的名字
docker tag 镜像id 指定镜像名字
  • 查询
# 查询 当前机器拥有的镜像文件
docker image ls  # 列出镜像文件
docker images  # 列出镜像文件 命令也就升级了

# 运行过的镜像 会产生一个docker 镜像的 ps 进程
docker ps  查看正在运行的镜像
docker ps -a 查看所有运行过的镜像

docker logs 容器的id  打印日志
docker logs 容器的id -f  不间断的打印日志
  • 删除
# 删除容器id
docker rm 容器id  #(docker ps -a)
docker rm `docker ps -aq`  # `` 反引号是 取得命令结果,保存下来

# 删除镜像
docker rmi 镜像is # (docker images) 显示 镜像的id
docker rmi `docker images -aq`  # 删除所有的镜像
``
+ 构建docker镜像

启动一个centos 镜像

docker run -it centos /bin/bash

安装 wget

yum install wget

配置 阿里云 源

https://opsx.alibaba.com/mirror

安装 vim

yum install vim

退出

exit

提交这个容器记录, 生成一个新的镜像源文件

docker commit 容器id 镜像名 你的dockerhub/自定义的名字

推送镜像到 dockerhub

docker push dockerId/镜像名称

导出镜像, 成为一个压缩文件, 可以给发家发送过去

docker save 镜像id > /opt/centos-vim-alimirror.tar.gz

导入镜像

docker load < /opt/centos-vim-alimirror.tar.gz

### dockerfile指定镜像
+ Dockerdile 就是我们制定的每一层添加配置
```# 你的项目依赖设么操作系统 你就指定什么操作系统
FROM scratch  # 制作base image 镜像基础 尽量官方的 image 作为 base image
FROM centos  # 使用 base image
FROM ubuntu:14.04 # 带有 tag的base image

# LABEL标签  告诉别人这个dockerfile是谁写的
LABEL version="1.0"  # 容器元信息,帮助信息 Metadata 类似以代码注释
LABEL maintainer="xxx@126.com"

# 对于复杂的RUN命令 避免无用的分层,多条命令用反斜线, 合成一行命令
RUN yum update && yum install -y vim \
    Pyhton-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME"

WORKDIR /root  # 切换工作目录
WORKDIR /test
WORKDIR demo
RUN pwd

# ADD 可以将本地代码 添加到docker容器空间
# ADD 还可以解压缩文件
ADD and COPY
ADD ./hello.py /opt/myCode/  将本地的 hello.py文件 添加到 docker的 /opt/myCode/目录下面
ADD test.tar.gz / 添加并解压到根目录

# COPY 就是将宿主机的文件,拷贝到容器空间内,且没有解压缩效果
COPY hello /opt/test/

# 远程添加文件 使用 curl 或者 wget

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

构建自己的 flask dockerfile

假如我们要在 /opt/flasksite 目录下创建

# coding:utf8
from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return "hello world"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

  • 准备Dockerfile文件
FROM centos  # 指定centos 的base image
COPY CentOS-Base.repo /etc/yum.repos.d/  # 更换yum源码
COPY epel.repo /etc/yum.repos.d/
RUN yum clean all  # 清空 yum 缓存命令
RUN yum install python-setuptools -y  # 安装python的依赖工具
RUN easy_install flask # 安装python2 的flask
COPY app.py /opt/  # 把本地的 appy 拷贝
WORKDIR /opt/
EXPOSE 8000  # 暴露容器的 8000端口对外访问
CMD ["python","app.py"]  # 执行这个命令
  • 构建docker镜像
docker build .


# 查看构建的 docker 镜像
docker images
docker tag 镜像id 镜像名字

启动 这个容器
docker run -d --name flask -p 8000:8000 镜像名字

docker 私有仓库

  • 下载一个私有的docker 镜像
# 1.下载私有仓库镜像
docker pull registry

# 2. 修改配置文件 让他支持 非https 协议的方式去推送文件
vim /etc/docker/daemon.json

"insecure-registries":["192.168.156.128:5000"]

# 3. 修改docker的service配置文件 让他加载/ect/docker/daemon.json
vim /lib/systemed/system/docker.service
# 在[Service]代码块中添加
EnvironmentFile=-/etc/docker/daemon.json

# 4.重启docker的服务
systemctl daemon-reload
systemctl restart docker

# 5.启动一个私有的镜像仓库容器实例
docker run --privileged=true \
    -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry
    # -v 参数 文件映射  宿主机文件夹目录

# 设置私有仓库镜像文件
    docker tag docker.io/hello-world 192.168.156.128:5000/hello-world  # 创建一个私有主机地址的docker镜像文件
    
# 6.推送 镜像 到私有仓库
docker push 192.168.156.128:5000/hello-world
# The push refers to a repository [192.168.156.128:5000/hello-world]
# af0b15c8625b: Pushed 
# latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524

# 7.浏览器查看
192.168.156.128:5000/v2/_catalog
{"repositories":["hello-world"]}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容