返回顶部

Docker入门学习(linux)

一、安装Docker(Linux)

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v

二、Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

img

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

三、Docker镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:

img

之前还有 Docker 官方加速器 https://registry.docker-cn.com ,现在好像已经不能使用了,我们可以多添加几个国内的镜像,如果有不能使用的,会切换到可以使用个的镜像来拉取。

Ubuntu14.04、Debian7Wheezy

对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中配置加速器地址:

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

重新启动服务:

$ sudo service docker restart

Ubuntu16.04+、Debian8+、CentOS7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}

之后重新启动服务:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Windows 10

对于使用 Windows 10 的系统,在系统右下角托盘 Docker 图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Daemon。在 Registrymirrors 一栏中填写加速器地址 https://docker.mirrors.ustc.edu.cn/ ,之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了。

img

检查加速器是否生效

检查加速器是否生效配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。

$ docker info
Registry Mirrors:
    https://reg-mirror.qiniu.com

四、Docker常用命令

1.启动相关命令

  • 启动docker服务

    systemctl start docker
    
  • 停止docker服务

    systemctl stop docker
    
  • 重启docker

    systemctl restart docker
    
  • 设置开机自启动docker

    systemctl enable docker
    

    查看docker服务状态

  • systemctl status docker
    

2.镜像相关命令

  • 查看镜像

    docker images
    docker images -q	--查看所有镜像的id
    
  • 搜索镜像

    docker search 镜像名称
    
  • 拉取镜像

    docker官方镜像版本查询下载,hub.docker.com

    docker pull 镜像名称		--不指定版本则为默认版本
    docker pull redis:5.0	--拉取下载reidis5.0
    
  • 删除镜像

    docker rmi 镜像名称	
    docker rmi imageID		--imageID通过docker images查询	
    

3.容器相关命令

  • 查看容器

    docker ps		--查看正在运行的容器
    docker ps -a	--查看所有容器,包括已关闭的容器
    
  • 创建容器

    docker run -it 镜像名称 /bin/bash
        -i: 交互式操作
        -t: 终端
        -d: 后台运行
        -name: 容器名称
        /bin/bash:放在镜像名后的是命令,这里希望有个交互式 Shell,因此用的是 /bin/bash。可以不写
    
  • 进入容器

    docker exec -it 容器ID /bin/bash
    
  • 启动容器

    docker start 容器ID
    
  • 停止容器

    docker stop 容器ID
    docker restart 容器ID		--重启容器
    
  • 删除容器

    docker rm -f 容器ID
    
  • 查看容器信息

    docker inspect
    

五、Docker容器数据卷

1.数据卷概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

3.数据卷作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

3.配置数据卷

  • 创建启动容器时,使用-v设置数据卷

    docker run 容器ID -v 宿主机目录(文件):容器内部目录(文件)
    注意事项:
    	目录必须是绝对路径
    	如果目录不存在,会自动创建
    	可以挂载多个数据卷
    

4.配置数据卷容器

  • 多容器进行数据交换
    • 多个容器挂载在同一个数据卷

    • 数据卷容器

  • 创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it -n=c3 -v /volume 镜像名
  • 创建启动c1c2容器,使用--volume-from c3参数设置数据卷
docker run -it -n=c1 --volumes-from c3 镜像名
docker run -it -n=c2 --volumes-from c3 镜像名

六、Docker应用部署

  • 部署MySQL

1.搜索mysql镜像

docker search mysql

2.拉取mysql镜像

docker pull mysql:5.6

3.创建容器,设置端口映射、目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
  • 参数说明:
    • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
    • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
    • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
    • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
    • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

4.进入容器,操作mysql

docker exec –it c_mysql /bin/bash

5.使用外部机器连接容器中的mysql

  • 部署Tomcat

    1.搜索tomcat镜像
    docker search tomcat
    
    2.拉取tomcat镜像
    docker pull tomcat
    
    3.创建容器,设置端口映射、目录映射
    # 在/root目录下创建tomcat目录用于存储tomcat数据信息
    mkdir ~/tomcat
    cd ~/tomcat
    
    docker run -id --name=c_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat 
    
    • 参数说明:

      • -p 8080:8080:将容器的8080端口映射到主机的8080端口

        -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

    4.使用外部机器访问tomcat

  • 部署Nginx

    1.搜索nginx镜像
    docker search nginx
    
    2.拉取nginx镜像
    docker pull nginx
    
    3.创建容器,设置端口映射、目录映射
    # 在/root目录下创建nginx目录用于存储nginx数据信息
    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    # 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
    vim nginx.conf
    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }
    
    
    
    docker run -id --name=c_nginx \
    -p 80:80 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    
    • 参数说明:
      • -p 80:80:将容器的 80端口映射到宿主机的 80 端口。
      • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录
      • -v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
    4.使用外部机器访问nginx

  • 部署Redis

    1.搜索redis镜像
    docker search redis
    
    2.拉取redis镜像
    docker pull redis:5.0
    
    3.创建容器,设置端口映射
    docker run -id --name=c_redis -p 6379:6379 redis:5.0
    
    4.使用外部机器连接redis
    ./redis-cli.exe -h 192.168.149.135 -p 6379
    

七、END

  • Dock镜像原理

posted @ 2023-02-22 20:45  r1se  阅读(94)  评论(0编辑  收藏  举报