Docker 入门

116 阅读5分钟

1.docker 安装

使用人员可以根据官网进行window、mac、linux的相关安装。这里使用的是相关的命令安装(比较方便)。系统为CenOS 7 * 64。

安装命令为:

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

2.docker 理解

image.png

3.docker 镜像加速配置

国内配置的源有很多,如下:

image.png

我们这里选择阿里云的,具体的命令如下:

sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF' 
{ "registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"] } EOF 
sudo systemctl daemon-reload 
sudo systemctl restart docker

注意:这里的加速地址每个人员都是不一样的,需要自己注册阿里云后,在镜像服务里面获取。

4.docker 命令

docker的命令分为三种:服务命令、镜像命令、容器命令。

4.1服务命令

  • 服务启动
    • systemctl start docker(类似启动window中的服务,这里启动docker,我们就可以使用docker了)
  • 停止服务
    • systemctl stop docker
  • 重启服务
    • systemctl restart docker
  • 查看服务状态
    • systemctl status docker
  • 设置服务开机启动
    • systemctl enable docker

4.2镜像命令

  • 查看镜像:查看本地所有的镜像
    • docker images
    • docker images -q 查看所有的镜像id
  • 搜索镜像:从网络中查找需要的镜像
    • docker search 镜像名称(如:redis)
  • 拉取镜像:从docker的仓库下载镜像到本地,镜像名称格式为:名称:版本号。如果版本号不指定,则是使用最新的版本。如果不知道镜像版本,则可以去docker hub搜索对应的镜像查看。
    • docker pull 镜像名称
  • 删除镜像:删除本地镜像
    • docker rmi 镜像id # 删除指定本地的镜像
    • docker rmi 'docker images -q' # 删除所有本地的镜像

4.3容器命令

  • 查看容器
    • docker ps # 查看正在运行的容器
    • docker ps -a # 查看所有容器
  • 创建并启动容器
    • docker run 参数 (docker run -it --name=a1 镜像名称:TAG 命令(/bin/bash),样例:docker run -it --name=a1 centos:7 /bin/bash)
    • 参数说明:
      • -i:保持容器的运行。通常与-t同时使用。加入it这两个参数后,容器创建后,自动进入容器中,退出容器后,容器自动关闭。
      • -t:为容器重新分配一个输入终端。通常与-i同时使用。
      • -d:以守护(后台)模式运行容器。创建一个容器后,在后台运行。需要使用docker exec进入容器。退出后,容器不会关闭。
      • -it:创建的容器一般称为交互模式容器;-id:创建的容器一般称为守护石容器。
      • --name:为创建容器的名称。
  • 退出容器
    • exit
  • 进入容器
    • docker exec 参数 # 退出容器,容器不会关闭。(样例:docker exec -it a1 /bin/bash)
  • 停止容器
    • docker stop 容器名称
  • 启动容器
    • docker start 容器名称
  • 删除容器:如果容器正在运行,则删除失败。需要停止容器才能删除。
    • docker rm 容器名称
  • 查看容器信息
    • docker inspect 容器名称

5.数据卷

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

image.png

5.1配置数据卷

  • 创建启动容器时,使用-v参数设置数据卷
    • docker run ... -v s宿主机目录(文件):容器内目录(文件)...
  • 注意事项:
    1. 目录必须是绝对路径
    2. 如果目录不存在,则会自动创建
    3. 可以挂载多个数据卷
  • 样例:
    • docker run -it --name=c1 -v /root/data:/root/data_container centos:latest /bin/bash

5.2配置数据卷容器

  • 多容器进行数据交换:
    1. 多个容器挂载同一个数据卷
    2. 数据卷容器

image.png

  • 创建启动一个数据卷容器,使用-v参数设置:
    • docker run -it --name=c3 -v /volume centos:latest /bin/bash
  • 创建启动其他两个容器,使用--volumes-from参数设置挂载数据卷容器:
    • docker run -it --name=c1 --volumes-from c3 centos:latest /bin/bash
    • docker run -it --name=c2 --volumes-from c3 centos:latest /bin/bash

5.3其他

  • 通过命令docker inspect c3可以查看具体的设置信息:

image.png

6.应用部署

主要部署几个应用:mySql、tomcat、nginx、redis。应用部署的原理图:

image.png 端口映射

6.1mySql

  • 搜索mysql镜像

    • docker search mysql
  • 拉取mysql镜像

    • docker pull search:5.6
  • 创建容器,设置端口映射、目录映射

    • 在/root目录下创建mysql目录用于存储musql数据信息
      • mkdir ~/mysql
      • cd ~/mysql
    • 配置命令
      • docker run -id -p 3306:3306 --name=c_mysql -v PWD/conf:/etc/mysql/conf.dvPWD/conf:/etc/mysql/conf.d -v PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
    • 参数说明:
      • -p 3306:3306: 将容器的3306端口映射到宿主机的3306端口。
      • -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的用户密码。

6.2Tomcat

  • 搜索tomcat镜像

    • docker search tomcat
  • 拉取tomcat镜像

    • docker pull tomcat
  • 创建容器,设置端口映射、目录映射

    • 在/root目录下创建tomcat目录用于存储tomcat数据信息
      • mkdir ~/tomcat
      • cd ~/tomcat
    • 配置命令
      • docker run -id -p 8080:8080 --name=c_tomcat -v $PWD:/usr/local/tomcat/webapps tomcat
    • 参数说明:
      • -p 8080:8080: 将容器的8080端口映射到宿主机的8080端口。
      • -v $PWD:/usr/local/tomcat/webapps:将主机当前目录挂载到容器的webapps。

6.3Nginx

  • 搜索nginx镜像

    • docker search nginx
  • 拉取nginx镜像

    • docker pull nginx
  • 创建容器,设置端口映射、目录映射

    • 在/root目录下创建nginx目录用于存储nginx数据信息
      • mkdir ~/nginx
      • cd ~/nginx
      • mkdir conf
      • cd conf
    • 在~nginx/conf/下创建nginx文件,粘贴下面内容
      • 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 -p 80:80 --name=c_nginx -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日志目录。
    

6.4Redis

  • 搜索redis镜像
    • docker search redis
  • 拉取nginx镜像
    • docker pull redis:5.0
  • 创建容器,设置端口映射
    • docker run -id -p 6379:6379 --name=c_redis nginx:5.0