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="[email protected]"

# 对于复杂的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"]}

你可能感兴趣的:(linux docker容器使用)