zoukankan      html  css  js  c++  java
  • docker

    Docker

    Docker介绍

    为了解决

    Docker安装

    1.yum包更新到最新

    # yum remove docker docker-common  docker-selinux docker-engine
    # rm -rf /var/lib/docker
    
    sudo yum update
    

    2.安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

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

    3.设置yum源为阿里云

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

    4.安装docker

    sudo yum install docker-ce
    

    5.安装后查看docker版本

    docker -v
    

    设置ustc镜像

    ustc是老牌的linux镜像服务器提供者,ustc的docker镜像加速器速度很快,ustc docker mirror的优势之一就是不需要注册,是真正的公共服务

    https://lug.ustc.edu.cn/wiki/mirrors/help/docker

    编辑该文件

    vi /etc/docker/daemon.json    # daemon.json是docker的配置文件
    

    在该文件中输入如下内容

    {
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    

    Docker的启动与停止

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

    启动docker:

    systemctl start docker
    

    停止docker:

    systemctl stop docker
    
    

    重启docker:

    systemctl restart docker
    
    

    查看docker状态

    systemctl restart docker
    
    

    开机启动

    systemctl enable docker
    
    

    查看docker概要信息

    docker info
    
    

    查看docker帮助文档

    docker --help
    
    

    镜像相关命令

    查看镜像

    docker images
    
    

    PEPOSITORY:镜像名称

    TAG:镜像标签

    IMAGE ID:镜像ID

    CREATED:镜像创建的日期(不是获取该镜像的日期)

    SIZE:镜像大小

    这些镜像都是存储在Docker宿主机的 /var/lib/docker 目录下

    搜索镜像

    可以在docker容器中找,也可以在网上找

    docker search 镜像名称
    
    

    网址: https://hub.docker.com/

    拉取镜像

    拉取镜像就是从中央仓库中下载镜像到本地

    docker pull 镜像名称
    
    

    例如:下载centos7镜像

    docker pull centos:7
    
    

    删除镜像

    按镜像 ID 删除镜像

    docker rmi 镜像ID
    
    

    删除所有镜像

    docker rmi `docker images -q`
    
    

    容器相关命令

    查看容器

    查看正在运行的容器

    docker ps
    
    

    查看所有容器

    docker ps –a
    
    

    查看最后一次运行的容器

    docker ps –l
    
    

    查看停止的容器

    docker ps -f status=exited
    
    

    dock创建容器

    创建容器参数说明

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

    1.交互式方式创建容器

    直接在容器内部进行操作

    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
        
    docker run -it --name=mycentos7 centos:centos7 /bin/bash   # 看着镜像的名称提示写
    
    

    退出当前容器

    exit
    
    

    2.守护式方式创建容器

    docker run -di --name=容器名称 镜像名称:标签
    
    

    登录守护式容器方式

    docker exec -it 容器名称 (或者容器ID)  /bin/bash
    
    

    3.进入容器

    docker attach 容器名称      # 进入容器,执行第一条命令,
    
    

    停止与启动容器

    停止容器

    docker stop 容器名称(或者容器ID)
    
    

    启动容器

    docker start 容器名称(或者容器ID)
    
    

    在启动容器之前需要有容器的存在,

    1.先下载容器的镜像

    2.根据容器的镜像创建容器

    3.启动容器

    删除容器

    docker rm 容器名称(容器ID)
    
    

    文件拷贝

    如果我们需要将文件拷贝到容器内可以使用cp命令

    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    
    

    也可以将文件从容器内拷贝出来

    docker cp 容器名称:容器目录 需要拷贝的文件或目录
    
    

    目录挂载

    将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件而去影响容器。

    创建容器 添加 -v参数,后边为宿主机目录:容器目录,例如:

    docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
    
    

    如果你共享的是多级的目录,可能会出现权限不足的提示

    这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加参数解决,--privileged=true来解决挂载点的目录没有权限的问题

    查看容器ip地址

    我们可以通过一下命令查看容器运行的各种数据

    docker inspect 容器名称(容器ID) 
    
    

    也可以直接执行下面的命令直接输出地址

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

    docker搭建Mysql

    -docker pull mysql
    -docker run -di --name=mysql1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    

    -p:代表端口映射,格式为 宿主机映射端口:容器映射端口

    -e:代表添加环境变量,MYSQL_ROOT_PASSWORD 是root用户的登录密码

    远程登录mysql的时候,连接宿主机的ip,指定端口为3307

    如果使用软件链接的时候提示需要权限的时候,按照下面的方法执行:

    # 报错:
    Client does not support authentication protocol requested by server; consider upgrading MySQL client
    
    # 解决方案
    在MySQL中执行下面命令
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    SELECT plugin FROM mysql.user WHERE User = 'root';
    
    

    dockers搭建redis使用

    1.拉去镜像

    docker pull redis
    
    

    2.创建redis容器

    1.现在本地新建一个redis.conf文件和data文件夹
    
    2.把redis的配置放在redis.conf文件中,
    bind 0.0.0.0
    daemonize NO
    protected-mode no
    requirepass 123456
    
    3.新建一个redis容器,将配置文件和文件夹映射到redis中,如果没有配置文件,docker默认无配置文件启动
    docker run -p 6379:6379 --name redis_6379 -v /home/docker/reids/conf/redis.conf:/etc/redis/redis.conf -v /home/docker/reids/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf --appendonly yes
    
    
    1. -p 6378:6379 容器redis 端口6379 映射 宿主机未6378

    2. --name redis01 容器 名字 为 redis01

    3. -v /root/redis/redis01/conf/redis.conf:/etc/redis/redis.conf 容器 /etc/redis/redis.conf 配置文件 映射宿主机 /root/redis/redis01/conf/redis.conf。 会将宿主机的配置文件复制到docker中。

    4. -v /root/redis/redis01/data:/data 容器 /data 映射到宿主机 /root/redis/redis01/data

    5. -d redis 后台模式启动 redis

    6. redis-server /etc/redis/redis.conf redis 将以 /etc/redis/redis.conf 为配置文件启动

    7. --appendonly yes 开启redis 持久化

    注意

    如果出现redis不能启动,看看配置文件是否配置正确。

    docker迁移与备份

    1.通过以下命令将容器保存为镜像

    docker commit mynginx mynginx_i    # docker commit 容器名  新保存镜像名
    
    

    2.通过以下命令将镜像保存为tar文件

    docker  save -o mynginx.tar mynginx_i   # docker save -o tar文件名  新保存的镜像
    
    

    3.镜像恢复与迁移

    首先我们先删掉镜像,然后执行此命令进行恢复

    docker load -i mynginx.tar   # docker loas -i tar文件
    
    

    -i 输入文件

    执行后再次查看镜像,可以看到镜像已经恢复,然后之前进行的操作都在这个镜像内,可以直接用来创建容器进行还原之前的容器。

    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	设置工作目录
    
    

    案例:生成一个容器自带django,requests模块的

    1.在本地新建一个文件Dockerfile,写入需要执行的命令

    FROM python:3.6
    MAINTAINER lqz
    RUN pip3 install django==1.11.9
    RUN pip3 install requests
    WORKDIR /home
    
    

    2.执行命令构建镜像

    docker build -t='django2.0' .   # -t 创建镜像的名字,最有的 . 指的是默认放在当前文件夹下
    
    

    注意后边的空格和 . 不要省略

    3.查看镜像是否建立完成

    docker images
    
    

    4.使用这个镜像产生一个容器,里边就是之前已经加入好的功能

    私有仓库搭建

    -是公司自己存放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
        10 根据需求将私服上的镜像拉下来
    			
    	-docker-compose:单机docker容器管理的插件
    	-多台机器,多个容器:k8s:Kubernetes
    
    

    公司使用docker

    #公司里使用docker
    -在windows上用pycharm写代码,提交到git上,在远程
    -测试服务器(centos、乌班图),从git上落下代码来,重启uwsgi,就是最新项目了     压力测试jmeter
    -加入docker后,从git拉下项目,直接重启docker容器,就运行最新项目了
    
    

    docker报错

    解决:Failed to get D-Bus connection: Operation not permitted

    docker中安装完httpd服务后,使用命令systemctl start httpd.service,发现报错,错误信息:Failed to get D-Bus connection: Operation not permitted
    
    解决方法:使用命令docker run -id --name centosNode1 --privileged=true centosnode /usr/sbin/init创建容器,然后使用docker exec -it centos7 /bin/bash进入容器
    
    
  • 相关阅读:
    bzoj 1497 最小割模型
    bzoj 1024 暴力深搜
    POJ1163(简单的DP)
    POJ3287(BFS水题)
    N皇后问题(DFS)
    BFS求解迷宫的最短路径问题
    poj2386(简单的dfs/bfs)
    Fence Repair(poj3253)
    Best cow Line(POJ 3617)
    全排列
  • 原文地址:https://www.cnblogs.com/whkzm/p/12493127.html
Copyright © 2011-2022 走看看