docker

Posted zhuangshenhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker相关的知识,希望对你有一定的参考价值。

 

1. Docker

  1.1 docker简介

  Docker是一个客户端-服务端(C/S)架构程序

   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化

  1.2 docker安装

  yum包更新到最新

sudo yum update  # sudo以管理员的身份执行

  设置yum源为阿里源

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  安装需要的软件包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  安装docker

sudo yum install docker-ce

  查看docker版本

docker -v

 

  1.3 Docker的启动与停止

  systemctl命令是系统服务器管理指令

  启动docker

systemctl start docker

  停止docker

systemctl stop docker

  重启docker

systemctl restart docker

  查看docker状态

systemctl status docker

  设置清华源

vi /etc/docker/daemon.json
# 在里面写入
{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

 

2. 镜像

  镜像当做容器的"源代码", 就好比类中的对象.

  1. 搜索镜像

# 命令
docker search python

#地址
https://hub.docker.com

  2. 下载镜像

docker pull centos:centos7.7.1908
docker pull centos  # 最新版本

  3. 查看下载的镜像

docker image

  4. 删除镜像

docker rmi id号

   

3. 容器

  1.  查看正在运行容器

docker ps

  2. 查看所有的容器(包括正在运行的和已经停止的)

docker ps -a

  3. 启动容器(基于image)

docker run
    -i 表示运行容器
    -t 表示容器启动后会进入其命令行,加入it两个参数后, 容器创建就能登录进去. 即分配一个伪终端
    --name 为创建的容器命名
    -v 表示目录映射关系(前者是宿主机, 后者是映射到宿主机上的目录)
        可以使用多个-v做多个目录或文件映射
        注意: 最好做好目录映射, 在宿主机上做修改, 然后共享到容器上
    -d 在run后面加上-d参数, 则会创建一个守护式容器在后台运行
        (这样穿件容器后不会自动登录容器, 如果只加-it两个参数, 创建后就不会自动进去容器)
    -p 表示端口映射, 前者是宿主机端口, 后者是容器内的映射端口, 可以使用多个-p做对个端口映射

  例子: 启动centos7

docker run -di --name mycentos7 centos:centos7.7.1908

  4.停止容器

docker stop 容器名/id号

  5. 启动已经有的容器

docker start 容器名/id号

  6. 进入容器内部

docker exec -it 容器名(id号) /bin/bash
docker exec -it 容器名(id号) sh
exit 退出

  7. 文件烤贝

向里拷贝(从宿主机---》容器)
    docker cp 需要拷贝的文件或目录 容器名称:容器目录
向外拷贝(从容器---》宿主机)
    docker cp 容器名称:容器目录 需要拷贝的文件或目录

  8.目录挂载

docker run -di -v /home/test:/home/test --name=mycentos3 centos:centos7.7.1908

  9. 查看容器ip地址

docker inspect 名字/id
docker inspect --format={{.NetworkSettings.IPAddress}} 容器名称(容器ID)

  10. 删除容器

docker rm 容器名称(容器ID)

 

4. 部署mysql

docker pull mysql:5.7
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

  部署redis, 支持远程连接

  创建data文件夹(数据持久化存放的地方)

  创建conf文件夹(添加配置), 然后在conf中创建redis.conf文件,内部写入:

bind 0.0.0.0 #绑定地址
daemonize NO
protected-mode no #运行远程连接
requirepass 123456 #密码是123456
docker run -p 6379:6379 --name redis_6379 -v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf --appendonly yes

 

 

5. 迁移与备份

-本质就是把容器打包成镜像
-压缩,传到别的机器
-别的机器load回来,就能看到image---run起来,直接容器就跑起来了

  1. 容器保存为镜像

docker commit mynginx mynginx_i

  2. 镜像备份

docker save -o mynginx.tar mynginx_i

 

6. Dockerfile

  Dockerfile是由一系列命令和参数构成的脚本,这些命令应用基于基础镜像并最终创建一个新的镜像(本质:dockerfile能生成镜像)

  注意: 文件名必须为Dockerfile

        -命令:
            FROM image_name:tag    定义了使用哪个基础镜像启动构建流程
            MAINTAINER user_name    声明镜像的创建者
            ENV key value    设置环境变量 (可以写多条)
            RUN command    是Dockerfile的核心部分(可以写多条),linux命令
            RUN wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
            RUN tar -xzf Python-3.6.10.tgz
            ADD source_dir/file dest_dir/file    将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
            COPY source_dir/file dest_dir/file    和ADD相似,但是如果有压缩文件并不能解压
            WORKDIR path_dir    设置工作目录
        -案例,在python下安装django 1.11.9 和requests模块
            FROM python:3.6
            MAINTAINER lqz
            RUN pip3 install django==1.11.9
            RUN pip3 install requests
            WORKDIR /home

 

  7. 私服搭建

  是公司自己存放docker镜像image的地方(自己做的镜像)
  步骤

1 拉取私有仓库镜像(此步省略)
docker pull registry
docker run -di --name=registry -p 5000:5000 registry

2 打开浏览器 输入地址http://39.100.80.124:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

3 修改daemon.json
vi /etc/docker/daemon.json

4 添加以下内容,保存退出。
{"insecure-registries":["39.100.80.124:5000"]} 

5 重启docker 服务
systemctl restart docker

6 镜像上传至私有仓库

7 标记此镜像为私有仓库的镜像
docker tag django2.0 39.100.80.124:5000/django2.0

8 再次启动私服容器
docker start registry

9 上传标记的镜像
docker push 39.100.80.124:5000/django2.0

 

总结:

  在Windows上使用pycharm写代码

  提交到git上面, 公司自建的一个gitlab

  大公司有那个测试服务器(CentOS, Ubuntu), 从git上拉去代码, 重启uwsgi, 就是最新项目了, 压力测试用jmeter

  加入docker后, 从git拉下项目, 直接重启docker容器, 就运行就是最新项目了

 

 

Python脚本: https://blog.csdn.net/chenzao123/article/details/81053517

以上是关于docker的主要内容,如果未能解决你的问题,请参考以下文章

markdown docker-compose片段

sh Docker片段

《Docker 源码分析》全球首发啦!

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

将 Docker 容器限制为单个 cpu 核心