Docker的基础使用

1、概述

(1)容器与虚拟机的比较
      它基于由 Google 公司推出的 Go 语言实现,是一种容器虚拟化技术。
      与传统虚拟机的对比:
Docker的基础使用_第1张图片
与传统虚拟机相比,Docker 的优势体现为启动速度快,占用体积小。

(2)Docker 服务器与客户端
      Docker 是一个 C/S 架构程序,Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机的 Docker 守护进程。
Docker的基础使用_第2张图片
(3)Docker 镜像与容器
      镜像是构建 Docker 的基石,用户基于镜像来运行自己的容器。镜像也是 Docker 生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,是由一系列指令一步一步构建出来。例如:
添加一个文件;
执行一条命令;
打开一个窗口。
也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。
      Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或者多个进程。可以认为,镜像是 Docker 生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登陆到容器中安装自己的软件或者服务。

所以 Docker 容器就是:
一个镜像格式;
一系列标准操作;
一个执行环境。
      像集装箱一样,所有的容器按照相同的方式将内容装载进去,同样 Docker 也不关心集装箱运向何方,你只需要构建容器,上传到 Registry,然后下载到一个物理或者虚拟的环境中测试。像标准集装箱一样,Docker 容器方便替换,可以叠加,易于分发,并尽量通用。

(4)Registry(注册中心)
      Docker 用 Registry 来保存用户构建的镜像。Registry 分为公有和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享和保存自己的镜像(说明:在 Docker Hub 下载镜像很慢,可以建立自己的私有 Registry)。
       https://hub.docker.com

2、Docker 安装与启动

(1)挂载 Centos7.x 镜像

1.yum 包更新到最新
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

(2)设置 ustc 镜像
       ustc 是老牌的 linux 镜像服务提供者了,在 ubuntu 5.04版本的时候就在用。ustc 的 docker 镜像加速器速度很快。ustc docke mirror 的优势之一就是不需要注册,是真正的公共服务。
       https://lug.ustc.edu.cn/wiki/mirrors/help/docker

1.编辑该文件
vi /etc/docker/daemon.json

2.在该文件中输入如下内容
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

(3)Docker 的启动和停止

1.启动
systemctl start docker

2.查看启动状态
systemctl status docker

3.停止
systemctl stop docker

4.重启
systemctl restart docker

5.开机启动
systemctl enable docker

6.查看docker概要信息
docker info

7.查看docker帮助文档
docker --help

3、常用命令

(1)镜像相关命令

       Ⅰ:查看镜像
              docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
镜像名称 镜像标签 镜像ID 镜像创建日期(不是获取该镜像的日期) 镜像大小

       Ⅱ:搜索镜像
              docker search 镜像名称

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
仓库名称 镜像描述 用户评价,反应一个镜像的受欢迎程度 是否官方 自动构建,表示该镜像是由Docker Hub自动构建流程创建的

       Ⅲ:拉取镜像
             拉取镜像就是从中央仓库中下载镜像到本地
              docker pull 镜像名称

              例如:下载centos7镜像
              docker pull centos:7

       Ⅳ:删除镜像
              按照镜像ID或者名称删除(一般指定ID)
              docker rmi 镜像ID/镜像名称

              删除所有镜像
              docker rmi `docker images -q`

(2)容器相关命令

       Ⅰ:查看容器
            查看正在运行的容器
            docker ps

            查看所有容器
            docker ps -a

            查看最后一次运行的容器
            docker ps -l

            查看停止容器
            docker ps -f status=exited

       Ⅱ:创建和启动容器
              创建容器常用参数说明:
              创建容器命令:docker run

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

       ① 交互式方式创建容器:
              docker run -it --name=容器名称 镜像名称:标签 /bin/bash
              这时通过 ps 命令查看,发现可以看到启动的容器,状态为启动状态

              退出当前容器(容器也会停止运行)
              exit

       ② 守护式方式创建容器
              docker run -di --name=容器名称 镜像名称:标签

              登陆守护容器的方式
              docker exec -it 容器名称(或者容器ID) /bin/bash

       ③ 停止与启动容器
             停止容器
             docker stop 容器名称(或者容器ID)

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

      Ⅲ:文件拷贝
             如果需要将文件拷贝到容器内可以使用 cp 命令
             docker cp 需要拷贝的文件或者目录 容器名称:容器目录

             也可以将文件从容器内拷贝出来
             docker cp 容器名称:容器目录 需要拷贝的文件或目录

      Ⅳ:目录挂载
            我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
            创建容器添加 -v 参数后边为宿主机目录,例如:
            docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 contos:7
            如果共享的是多级目录,则可能出现权限不足的提示,这是因为Centos中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。

      Ⅴ:查看容器的IP地址
            可以通过以下命令查看容器运行的各种数据
            docker inspect 容器名称(容器ID)
            也可以直接执行下面的命令直接输出IP地址
            docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

      Ⅵ:删除容器
            删除指定的容器
            docker rm 容器名称(容器ID)

4、应用部署

Mysql 部署

(1)拉取 mysql 镜像
      docker pull centos/mysql-57-centos7

(2)创建容器
      docker run -di --name=xcm_mysql -p 33060:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码

(3)进入 mysql 容器
      docker exec -it xcm_mysql /bin/bash

(4)登陆MySQL
       mysql -u root -p

(5)远程连接mysql
      连接宿主机的IP,指定端口为33060

Tomcat 部署

(1)拉取镜像
      docker pull tomcat

(2)创建容器
      docker run -di --name=myTomcat -p 9090:8080 -v /root/www/myTomcat/webapps:/usr/local/webapps tomcat

Nginx 部署

(1)拉取镜像
      docker pull nginx

(2)创建容器
      docker run -di --name=myNginx -p 80:80 nginx

Redis 部署

(1)拉取镜像
      docker pull redis

(2)创建容器
      docker run -di --name=myRedis -p 6379:6379 redis

5、迁移和备份

(1)容器保存为镜像
      可以通过下面的命令将容器保存为镜像
      docker commit myNginx mynginx_i

(2)镜像备份
      可以通过下面的命令将镜像保存为tar文件
      docker save -o mynginx.tar mynginx_i

(3)镜像的恢复与迁移
      首先要确保没有重名镜像,然后执行此命令恢复
      doker load -i mynginx.tar
      -i 输入的文件
      执行后再次查看镜像,可以看到镜像已经恢复

6、Dockerfile

(1)概述
      Docker 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。实际上就是为了创建出一个完全一致的环境。

(2)常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量(可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file
dest_dir/file
将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file
dest_dir/file
和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录

(3)使用脚本创建镜像
步骤:
      ① 创建目录
      mkdir -p /usr/local/dockerjdk8
      ② 下载 jdk 文件至 /usr/local/dockerjdk8
      ③ 创建文件 Dockerfile vi Dockerfile

#依赖镜像名称和ID
FROM centos
#声明镜像的创建者
MAINTAINER xiangchaoming
#设置当前目录
WORKDIR /usr
#执行shell命令创建目录
RUN mkdir /usr/local/java
#将jdk压缩文件复制到容器中(会自动解压)
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java
#设置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

      ④ 执行命令构建镜像(最后的 . 表示Dockerfile的目录为当前目录)
      docker build -t='jdk1.8' .

      ⑤ 查看镜像是否构建完成
      docker images

7、Docker私有仓库

(1)私有仓库的搭建与配置
      ① 拉取私有仓库镜像
       docker pull registry
      ② 启动私有仓库容器
       docker run -di --name=registry -p 5000:5000 registry
      ③ 打开浏览器输入 http://192.168.23.142:5000/v2/_catalog 看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空
      ④ 修改 daemon.json
       vi./etc/docker/daemon.json
      添加以下内容,保存退出。
       {"insecure-registries": ["192.168.23.142:5000"]}
      此步用于让 docker 信任私有仓库地址

(2)镜像上传至私有仓库
      ① 标记此镜像为私有仓库的镜像
       docker tag jdk1.8 192.168.23.142:5000/jdk1.8
      ② 上传标记的镜像
       docker push 192.168.23.142:5000/jdk1.8

你可能感兴趣的:(Docker,docker)