【中间件】Docker

一、Docker

 (一)基础概念

1、概念

是linux容器的一种封装,它是最流行的Linux容器解决方案,由go语言开发

提供简单易用的容器使用接口,方便创建、使用和销毁

2、应用场景

自动打包、持续集成、发布

内核级的虚拟化、快速迁移、对资源的利用率高

3、组成架构

Docker daemon: 运行在宿主机上,守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon

4、组件

镜像  image:一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载
容器  container:启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响
仓库  hub/registry:共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry

(二)使用

1、安装

# 安装docker
yum install docker
# 启动docker
systemctl start/status docker

2、配置加速

使用DaoCloud配置加速

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

3、基础命令

docker search centos # 搜索centos镜像
docker pull hello-docker # 获取centos镜像
docker run  hello-world   #运行一个docker镜像,产生一个容器实例(也可以通过镜像id前三位运行)
docker image ls  # 查看本地所有镜像
docker images  # 查看docker镜像
docker image rmi hello-docker # 删除centos镜像
docker ps -a  # 列出所有运行过的容器记录
docker save centos > /opt/centos.tar.gz  # 导出docker镜像至本地
docker load < /opt/centos.tar.gz   #导入本地镜像到docker镜像库
docker stop  `docker ps -aq`  # 停止所有正在运行的容器
docker  rm `docker ps -aq`    # 一次性删除所有容器记录
docker rmi  `docker images -aq`   # 一次性删除所有本地的镜像记录

 docker start container_name/container_id
  docker stop container_name/container_id
  docker restart container_name/container_id

  docker attach container_name/container_id   #进入容器

4、启动容器

docker run --name mydocker -it centos /bin/bash  #启动终端,允许用户交互
docker exec -it  ee9 /bin/bash  # 进入容器交互式界面

5、自定义镜像

docker container ls -a # 查看容器记录
docker commit 059fdea031ba chaoyu/centos-vim # 提交容器,创建新的镜像

6、外部访问

docker logs -f cfd  # #不间断显示log
docker run -d -p 9000:5000 training/webapp python app.py # 实现端口映射

7、使用dockerfile定制镜像

FROM centos:7
MAINTAINER http://blog.51cto.com/andyxu
ENV TIME_ZOME Asia/Shanghai
ARG NV="nginx-1.14.0"

COPY nginx.conf /data/nginx/conf/
ADD $NV.tar.gz /tmp
RUN yum -y install gcc gcc-c++ make openssl-devel pcre-devel \
        && mkdir -p /data \
        && cd /tmp/$NV \
        && ./configure --prefix=/data/nginx \
        && make -j 2 \
        && make install \
        && echo "${TIME_ZOME}" > /etc/timezone \
        && ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime \
        && rm -rf /tmp/nginx* \
        && yum clean all \
        && yum -y remove gcc gcc-c++ make

WORKDIR /data/nginx/
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]

构建:

cd dockerfile/nginx/
docker build -t nginx:1.14.0 .

8、发布到公有仓库

docker login
docker tag chaoyu/centos-vim peng104/centos-vim # tag是用户名
docker push peng104/centps-cmd-exec:latest # 推送
docker pull peng104/centos-entrypoint-exec # 下载

9、发布到私有仓库

docker pull registry  #下载私有仓库镜像
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry  registry
    -d 后台运行 
    -p  端口映射 宿主机的5000:容器内的5000
    -v  数据卷挂载  宿主机的 /opt/data/registry :/var/lib/registry 
    registry  镜像名
    /var/lib/registry  存放私有仓库位置
# Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制(需要修改配置文件)
docker tag docker.io/peng104/hello-world-docker 192.168.11.37:5000/peng-hello #修改推送的tag标记
# 浏览器访问http://192.168.119.10:5000/v2/_catalog查看仓库
# 下载私有仓库镜像
docker pull 192.168.11.37:5000/peng-hello

10、示例

# 1.准备好app.py的flask程序
    [root@localhost ~]# cat app.py
    from flask import Flask
    app=Flask(__name__)
    @app.route('/')
    def hello():
        return "hello docker"
    if __name__=="__main__":
        app.run(host='0.0.0.0',port=8080)
    [root@master home]# ls
    app.py  Dockerfile

# 2.编写dockerfile
    [root@localhost ~]# cat Dockerfile
    FROM python:2.7
    LABEL maintainer="温而新"
    RUN pip install flask
    COPY app.py /app/
    WORKDIR /app
    EXPOSE 8080
    CMD ["python","app.py"]

# 3.构建镜像image,找到当前目录的Dockerfile,开始构建
    docker build -t peng104/flask-hello-docker .

# 4.查看创建好的images
    docker image ls

# 5.启动此flask-hello-docker容器,映射一个端口供外部访问
    docker run -d -p 8080:8080 peng104/flask-hello-docker

# 6.检查运行的容器
    docker container ls

# 7.推送这个镜像到私有仓库
    docker tag  peng104/flask-hello-docker   192.168.11.37:5000/peng-flaskweb
    docker push 192.168.11.37:5000/peng-flaskweb

 

posted @ 2021-09-02 23:21  哥们要飞  阅读(201)  评论(0编辑  收藏  举报