Docker

前言

1、Docker

  • 一个完整的 Docker 有以下几个部分组成:

    • Client:客户端
    • Daemon:守护进程
    • Image:镜像
    • Container:容器
  • 我们通过客户端写命令,然后客户端将命令发送给守护进程,守护进程再将命令执行的结果返回给客户端,这就使我们能通过命令查看执行结果。

  • 镜像就是容器的源代码,容器通过镜像启动,使用仓库来保存用户构建的镜像,仓库分为共有和私有。

  • 软件下载资源

2、配置

  • 安装 Docker

    1
    2
    3
    4
    5
    # 更新 yum
    $ yum -y update

    # 安装 Docker
    $ yum install docker -y
  • 启动/停止

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 启动
    $ systemctl start docker.service

    # 停止
    $ systemctl stop docker.service

    # 重启
    $ systemctl restart docker.service

    # 状态
    $ systemctl status docker.service
  • 安装常用工具

    1
    $ yum install iproute ftp bind-utils net-tools wget -y
  • 配置 dns

    1
    2
    3
    4
    5
    6
    7
    8
    $ vi /etc/resolv.conf 

    # Generated by NetworkManager
    search www.tendawifi.com
    nameserver 119.29.29.29
    nameserver 182.254.116.116

    $ nslookup www.baidu.com
  • 配置镜像加速器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ sudo mkdir -p /etc/docker

    $ sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://hvmf8r55.mirror.aliyuncs.com"]
    }
    EOF

    $ sudo systemctl daemon-reload

    $ sudo systemctl restart docker

    # 查看 daemon.json 是否已经生效了
    $ tail /etc/docker/daemon.json
  • 拉取镜像:把镜像从服务器镜像仓库上拉到 Docker 本地。

    1
    2
    # 拉取镜像
    $ docker pull how2j/tmall
  • 运行镜像:拉到本地之后,再把这个镜像激活,所谓的激活,就是把他 run 起来。

    1
    2
    # 运行镜像
    $ docker run -dit --privileged -p21:21 -p80:80 -p8080:8080 -p30000-30010:30000-30010 --name how2jtmall how2j/tmall:latest /usr/sbin/init
  • 检查端口

    1
    $ netstat -anp|grep 8080
  • 重启 Docker 容器中 Tomcat:所谓的进入容器,就是进入启动的 运行 Tomcat 的 Linux。进去之后,就可以像操作一个普通 Linux 那样操作了。

    1
    2
    3
    4
    5
    6
    # 进入容器
    $ docker exec -it how2jtmall /bin/bash

    # 重启 Tomcat
    $ /usr/local/tomcat7/bin/shutdown.sh
    $ /usr/local/tomcat7/bin/startup.sh
  • 查看访问地址

    1
    $ ip address

3、镜像管理

  • 所谓的镜像,就是持久化后的,安装了各种工具,软件和服务的一个操作系统。

  • 镜像就相当于还没激活的容器。

  • 镜像管理

    1
    2
    3
    4
    5
    # 查找镜像,查寻镜像仓库中的镜像,镜像名称前面会默认加上 docker.io/
    $ docker search tomcat

    # 拉取镜像,选择镜像版本,不同镜像的用法不一样,在它的描述里都有详细讲解如何启动等等信息
    $ docker pull tomcat:8.0
  • images 命令

    1
    2
    # 查看所有本地镜像
    $ docker images
  • rmi 命令

    1
    2
    3
    4
    5
    # 删除镜像,镜像有对应的容器时删不掉
    $ docker rmi docker.io/tomcat:8.0

    # 删除所有镜像
    $ docker rmi $(docker images -q)
  • tag 命令

    1
    2
    # 标记镜像,修改本地镜像名称
    $ docker tag docker.io/tomcat:8.0 docker.io/mytomcat:8.0
  • push 命令

    1
    2
    # 把镜像提交到仓库
    $ docker push how2j/tmall:latest

4、容器管理

  • 容器就是跑起来的镜像,就是一个完整的工作环境。

  • 运行镜像

    1
    2
    # 运行镜像
    $ docker run -dit --privileged -p21:21 -p80:80 -p8080:8080 -p30000-30010:30000-30010 --name how2jtmall how2j/tmall:latest /usr/sbin/init
  • 容器生命周期管理:stop 之后再 start, 容器需要启动,Tomcat 也需要启动,里面的 Mysql 也需要启动。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 暂停
    $ docker pause how2jtmall

    # 恢复
    $ docker unpause how2jtmall

    # 停止
    $ docker stop how2jtmall

    # 启动
    $ docker start how2jtmall
  • 进入容器

    1
    2
    3
    4
    5
    # 进入容器
    $ docker exec -it how2jtmall /bin/bash

    # 进入容器
    $ docker attach -it how2jtmall /bin/bash
  • 查询容器

    1
    2
    3
    4
    5
    # 查询所有的容器
    $ docker ps -a

    # 查询查询 run 状态的和 pause 状态的,stop 状态的就不会查询出来了
    $ docker ps
  • 检查容器的各项信息

    1
    2
    # 检查容器的各项信息
    $ docker inspect how2jtmall
  • 删除容器:在运行中的容器是不能删除的,要先 stop,然后再删除。

    1
    2
    3
    4
    5
    # 删除容器
    $ docker rm how2jtmall

    # 删除所有容器
    $ docker rm `docker ps -a -q` -f
  • 把容器转换为镜像:对容器做了修改后,把改动后的容器,再次转换为镜像。

    1
    2
    # 把容器转换为镜像
    $ docker commit how2jtmall how2j/tmall:now

5、网络恢复

  • 虚拟机一旦重启,或者关机过,那么就会出现可以访问 Linux,但是无法访问里面的 Docker 的情况。 可以在 CentOS 里做如下事情网络恢复

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ vi /etc/sysctl.conf

    # 或者
    $ vi /usr/lib/sysctl.d/00-system.conf

    # 添加如下代码
    net.ipv4.ip_forward=1

    # 重启 network 服务
    $ systemctl restart network

    # 查看是否修改成功,如果返回为 “net.ipv4.ip_forward = 1” 则表示成功了
    $ sysctl net.ipv4.ip_forward

6、提交镜像

  • 提交镜像镜像仓库

    1
    2
    3
    4
    5
    # 在 docker 后台进行登录
    $ docker login

    # 推送镜像到仓库
    $ docker push how2j/tmall:latest

7、DockerFile

  • DockerFile 与 commit 一样,也是用于做镜像的。

  • 与 commit 把现成的 容器转换为镜像不同的是,DockerFile 需要自己写脚本,一条一条地把最终镜像需要的内容写进去。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 创建一个 docker_demo 目录
    $ mkdir docker_demo

    # 然后在里面创建要给 Dockerfile
    $ cd docker_demo
    $ vi Dockerfile

    # 文件的内容如下,表示基于 how2j/centos7_tools_ftp:latest 这个镜像创建,作者是 1473335800@qq.com,运行的命令是安装 java.
    FROM how2j/centos7_tools_ftp:latest
    MAINTAINER 1473335800@qq.com
    RUN yum -y install java-1.8.0-openjdk.x86_64

    # 到 docker_demo 目录下运行,注意,最后有一个点
    $ docker build -t how2j/centos_7_tools_ftp_java .
  • 学习 Docker 之 Dockerfile 的命令

文章目录
  1. 1. 前言
  2. 2. 1、Docker
  3. 3. 2、配置
  4. 4. 3、镜像管理
  5. 5. 4、容器管理
  6. 6. 5、网络恢复
  7. 7. 6、提交镜像
  8. 8. 7、DockerFile
隐藏目录