Docker命令及常用容器下载使用

Docker 命令集合---常用容器下载使用

  • 前言
  • 1、Docker是什么?
    • 1.1 Docker的概念
    • 1.2 Docker版本说明
    • 1.3 Docker 核心对象
    • 1.4 Docker 应用架构分析
      • 1.4.1 架构图
      • 1.4.2 Docker运行机制
  • 2、Docker常用命令
    • 2.1 docker在线安装
    • 2.2 docker基本命令
    • 2.3 操作docker镜像
  • 3 、数据管理实践
    • 3.1 数据卷操作:
    • 3.2 挂载主机目录
  • 4、docker 镜像制作
    • 4.1 Docker镜像制作实践
      • 4.1.1 制作JDK镜像
    • 4.2制作Sentinel镜像(练习)
      • 4.2.1准备工作
      • 4.2.2 构建Sentinel镜像
  • 5、docker常用镜像安装
    • 5.1 安装MySql数据库
      • 5.1.1 安装并启动镜像
      • 5.1.2 登陆mysql服务
    • 5.2 安装Redis数据库
      • 5.2.1 安装与启动镜像
      • 5.2.2 访问redis服务器
    • 5.3 安装Nginx代理
      • 5.3.1安装并启动镜像
      • 5.3.2 访问nginx服务
    • 5.4 安装Nacos组件
      • 5.4.1 安装与镜像启动
      • 5.4.2 访问nacos服务
  • 6、Docker 容器互联
    • 6.1 简介
    • 6.2 容器互联实践

前言

提示:以下是本篇文章正文内容,下面案例可供参考

1、Docker是什么?

1.1 Docker的概念

Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器,容器之间可以相互隔离,独自运行。基于这种方式,我们可以更快地打包、部署和运行应用程序,实现软件的快速交付。

1.2 Docker版本说明

Docker分成了两个版本:Docker EE (企业版)和Docker CE(社区版本),其中,Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用。Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。

1.3 Docker 核心对象

  1. 镜像(Image)
    Docker 镜像可以看成是磁盘上特殊的文件系统(https://hub.docker.com/),镜像打包了应用的运行环境以及应用程序,是静态的。可以通过 Docker 启动这个镜像,进而将镜像中的程序在一个容器中启动运行起来。在 Docker 镜像中,操作系统是高度精简的,镜像中的操作系统还不包含内核,容器都是共享所在的宿主机的内核。所以有时会说容器仅包含必要的操作系统(通常只有操作系统文件和文件系统对象),容器中查看到的 Linux 内核版本与宿主机一致。假如现在理解镜像有些抽象,可以暂时先将其理解为一个安装程序。
  2. 容器(Container)
    Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。容器是轻量级的,它不需要管理程序的额外负担,而是直接在主机的内核中运行。我们常常说使用镜像打包应用程序,使用 Docker 发布、部署应用程序。当你的应用成功在 Docker 上运行时,这个应用就是容器化应用。我们还可以将通过 Docker 启动的容器看成是操作系统中的一个进程。

1.4 Docker 应用架构分析

1.4.1 架构图

Docker 是一种Client/Server架构的应用程序,Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。如图所示(参考docker 官网https://docs.docker.com/get-started/overview/)。
Docker命令及常用容器下载使用_第1张图片
其中:
1.Docker Client是安装完 Docker 之后,直接使用的 docker命令。
2.Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
3.Docker Daemon是docker的后台守护进程,侦听并处理Docker客户端命令,管理Docker对象,例如镜像,容器,网络和卷。
4.Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images(本地镜像仓库)中.
5.Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。

1.4.2 Docker运行机制

docker pull 执行过程:
1)客户端将指令发送给docker daemon
2)docker daemon 先检查本地images中有没有相关的镜像
3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
docker run 执行过程:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层
从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序

2、Docker常用命令

2.1 docker在线安装

  1. 安装一组工具    sudo yum install -y yum-utils
  2. 设置 yum 仓库地址    
    a) sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    b)sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. 更新 yum 缓存    sudo yum makecache fast
    #yum 是包管理器
  4. 安装新版 docker   
    sudo yum install -y docker-ce docker-ce-cli containerd.io

2.2 docker基本命令

  1. 查看系统内核     uname -r
  2. 启动docker 镜像     systemctl start docker
  3. 停止docker 镜像     systemctl stop docker
  4. 停止docker 镜像     systemctl restart docker
  5. 设置docker 镜像开机自启     systemctl enable docker
  6. 禁止docker 镜像开机自启     systemctl disable docker
  7. 查看docker版本     docker verison
  8. 显示docker系统的信息     docker info
  9. 查看docker info中具体key的信息
    docker info | grep ‘Docker Root Dir:’
  10. Docker镜像加速
    由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
    下面命令直接生成文件 daemon.json
cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

2.3 操作docker镜像

提示:以CentOS镜像为例 ,官方镜像仓库地址为https://hub.docker.com/

  1. 下载镜像    
docker pull centos:7
  1. 查看镜像image详情    
docker inspect centos:7
  1. 查看所有镜像文件    
docker images
  1. 检索镜像文件    
docker search centos:7
  1. 显示一个镜像的历史    
docker history centos:7  
  1. 创建并启动容器(Container)   
docker run -it xxxx bash

其中: 1.xxxx - 镜像名, 或 image id 的前几位, 2.-it 这是两个参数(-i表示交互式操作, -t 表示终端) 3 bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)

  1. 启动运行 centos7`镜像    
docker run -it centos:7 bash
  1. 查看Docker中的容器(Container)    
docker ps
  1. 查看docker运行中的所有容器    
docker ps -a
  1. 查看容器日志(logs)信息    
docker container logs 114 #114为容器id(一般写前三位即可)
  1. 停止(stop)或重启(Restart)容器(Container)
    停止运行的容器:    
docker container stop 容器id

重新启动容器:    

docker container restart 容器id
  1. 进入(exec)指定容器    
    当容器必须处于运行状态,才能进入容器
docker exec -it 802 bash #802为容器id
  1. 从容器(Container)中退出(exit)    exit
    进入了启动的容器,才能退出容器
  2. 删除(rm)容器(Container)    
    容器关闭才能用此命令执行删除 否则会报错
    如果删除运行中的容器,需要添加 -f 参数执行强制删除
docker container rm 容器id
docker container rm -f 802 #802为容器id
  1. 清理所有处于终止状态容器    
docker container prune
  1. 导入镜像操作
    镜像导入(要在镜像 文件所在目录下执行)
docker load < image-name.tar.gz
  1. 导出镜像文件
    镜像导出(linux系统中的镜像文件下载到本地-例如window),导出后给他人使用
docker save  image-name | gzip > image-name.tar.gz 
  1. 运行镜像文件    
docker run image-name

3 、数据管理实践

在容器中管理数据主要有两种方式:
数据卷(Volumes)
挂载主机目录 (Bind mounts)
数据卷:
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

3.1 数据卷操作:

  1. 创建数据卷:
docker volume create container-vol
  1. 查看所有数据卷:
docker volume ls
  1. 查看指定 数据卷 的信息
docker volume inspect container-vol
  1. 启动挂载数据卷的容器:
docker run -it --mount source=container-vol,target=/root centos:7 bash

简写方式:

docker run -it -v container-vol:/root centos:7 bash 

-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录

  1. 删除数据卷(如果数据卷被容器使用则无法删除):
docker volume rm container-vol
  1. 清理无主数据卷
docker volume prune

3.2 挂载主机目录

  1. 直接挂载的方式进行数据操作:
docker run -it -v /usr/app:/opt/app centos:7 bash

1)/usr/app:为宿主机目录 2)/opt/app: 为启动容器的一个目录 3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。

  1. 查看挂载目录信息
docker inspect 容器id

4、docker 镜像制作

4.1 Docker镜像制作实践

背景:
我们基于docker pull指令可以从远程仓库下载我们需要的一些镜像(image),但是镜像仓库中的镜像是从哪里来的呢,假如镜像仓库中没有我们需要的镜像呢,所以本小结我们会讲解我们自己如何制作镜像.
镜像制作分析:
我们可以将一些文件通过Dockerfile文件进行描述,然后通过build操作构建一个镜像,例如:
Docker命令及常用容器下载使用_第2张图片

其中,图中的Dockerfile用来构建镜像的文本文件,内部会包含一条条构建镜像所需的指令和说明。

4.1.1 制作JDK镜像

一:准备工作
centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)
jdk压缩包 jdk-8u51-linux-x64.tar.gz(可以从课前资料获取),基于此压缩包,制作jdk镜像。
二:创建Dockerfile文件
在创建新的镜像时都需要有一个Dockerfile文件(文件名一定要注意大小写),这个文件中定义镜像制作过程,这一小结以JDK镜像制作过程为例,讲解Dockerfile文件以及文件内容.

  1. 进入jdk-8u51-linux-x64.tar.gz文件所在目录,
  2. 基于vim创建Dockerfile文件
vim  Dockerfile
  1. 按键盘上的"i"进入编辑模式
  2. 拷贝如下代码到你的Dockerfile中,例如:
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
  1. 拷贝完成,按ESC进入命令行模式(又叫最后一行模式)
  2. 按shift+冒号,输入wq保存退出.
  3. 创建JDK镜像文件
    在Dockerfile所在目录执行docker build指令.
docker build -t jdk:8 .  

#不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.
注意末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。

  1. 运行JDK镜像(image)文件
    在宿主机中执行如下指令,启动JDK容器
docker run -it jdk:8 bash

进入容器以后,可以通过echo $PATH查看环境变量(注意单词大小写),并可以通过java –version查看JDK版本信息。

4.2制作Sentinel镜像(练习)

4.2.1准备工作

centos:7镜像容器
jdk-8u51-linux-x64.tar.gz     jdk文件
sentinel-dashboard-1.8.1.jar    sentinel文件
说明,通过docker images指令容器是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.1.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)

4.2.2 构建Sentinel镜像

第一步:在sentinel所在目录创建Dockerfile文件,并添加如下内容

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
ADD sentinel-dashboard-1.8.1.jar  /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.1.jar"]

其中,EXPOSE表示对外暴露的服务端口,ENTRYPOINT中写的是你容器启动时候要执行的指令.
第二步:使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)

docker build -t  sentinel:8 . 

#不要丢掉这里的点
第三步:后台运行sentinel容器

docker run -d --name sentinel8181 -p 8181:8080 sentinel:8 

#-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名
第四步:查看sentinel容器

docker ps

假如看不到容器,可通过"docker container logs 容器id"方式查看容器状态.
第五步:访问sentinel服务
可以在window中访问时你的linux系统中启动的sentinel服务,ip地址应该为宿主机的ip地址,端口号为宿主机的端口号.例如 http://192.168.126.129:8181

5、docker常用镜像安装

5.1 安装MySql数据库

5.1.1 安装并启动镜像

第一步:在hub.docker.com上搜索mysql镜像
第二步:拉取指定版本的mysql,也可以指定拉取版本,例如:

docker pull mysql:8.0.23

第三步:检查mysql镜像

docker images

第四步:启动运行mysql镜像 (docker run 用于启动一个容器)

sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23

假如安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 删除再重新安装即可。

5.1.2 登陆mysql服务

第一步:进入容器 (退出容器用exit)

sudo docker exec -it mysql bash

第二步:登陆(默认密码root),一定要先进入mysql容器。

mysql -uroot -proot

停止和启动mysql服务
停止mysql服务(可选)

docker stop mysql

启动mysql服务

docker start mysql

查看mysql启动日志

docker container logs mysql

设置mysql开机自启动(可选)

docker update mysql --restart=always

5.2 安装Redis数据库

5.2.1 安装与启动镜像

第一步:下载镜像文件

docker pull redis

第二步:准备配置文件
创建redis配置文件目录

mkdir -p /usr/local/docker/redis01/conf

在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录)

touch /usr/local/docker/redis01/conf/redis.conf

第三步:创建redis实例并启动

sudo docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf 

第四步:查看正在运行的进程

docker ps

5.2.2 访问redis服务器

第一步:控制台直接连接redis测试

docker exec -it redis01 bash

第二步:检测redis 版本

redis-server  -v

或者

redis-cli -v

第三步:登录redis(默认不需要密码)

redis-cli

或者直接将上面的两个步骤合为一个步骤执行也可以,指令如下:

docker exec -it redis01 redis-cli

停止redis服务

docker stop redis01

启动redis服务

docker start redis01

重启 redis 服务

docker restart redis01

5.3 安装Nginx代理

5.3.1安装并启动镜像

第一步:拉取nginx镜像 (从这里hub.docker.com去查找)

docker pull nginx

第二步:查看images镜像

docker images

第三步:创建数据卷(这个对象会在宿主机直接创建一个目录)

docker volume create nginx-vol

说明:查看数据卷对应的宿主机目录,可以通过如下指令:

docker inspect nginx-vol

第四步:启动nginx服务

docker run --name nginx  -p 80:80 -v nginx-vol:/etc/nginx -d nginx

其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录

说明:假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.

5.3.2 访问nginx服务

进行访问检测,如图所示:
Docker命令及常用容器下载使用_第3张图片
停止nginx服务

docker stop nginx

启动nginx服务

docker start nginx

重启nginx服务

docker restart nginx

5.4 安装Nacos组件

5.4.1 安装与镜像启动

第一步:拉取nacos(hub.docker.com)

docker pull nacos/nacos-server:1.4.1

第二步: mysql中执行nacos的sql脚本文件
1)将此文件nacos-mysql.sql(这个文件可从code服务器下载)拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)
2)在linux环境下启动并登录mysql
进入mysql容器(前提是mysql已启动)

docker exec -it mysql bash

登录mysql

mysql -uroot -p

3)通过source指令运行容器目录下的sql文件

source  /etc/mysql/nacos-mysql.sql  

#这里的/etc/mysql为容器中的一个目录(要选择你自己挂载的目录)
第三步:创建并启动nacos容器(拷贝下面内容时,账号和密码要用自己宿主机ip,自己数据库的账号密码)

docker run  \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.126.129 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1

参数说明 单节点模式 MODE=standalone 数据库地址 MYSQL_SERVICE_HOST 数据库用户名 MYSQL_SERVICE_USER 数据库密码 MYSQL_SERVICE_PASSWORD 需连接的数据库名称 MYSQL_SERVICE_DB_NAME 端口映射 -p 8848:8848 任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启) --restart=always
第四步:检查nacos服务

docker ps

假如启动失败,检查启动日志,例如:

docker container logs nacos

其中,nacos的启动日志在/home/nacos/logs/start.out文件中。

5.4.2 访问nacos服务

启动nacos,然后在windows中输入http://ip:port/nacos方式进行访问测试
说明,nacos登录时,默认用户名和密码一般都是nacos.
Nacos 与 MySQL 通讯分析
Docker命令及常用容器下载使用_第4张图片

停止nacos服务

docker stop nacos

启动nacos服务

docker start nacos

重启nacos服务

docker restart nacos

6、Docker 容器互联

6.1 简介

概述
Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。
解决方案:
Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
初始化网路

6.2 容器互联实践

架构设计
Docker命令及常用容器下载使用_第5张图片
第一步:新建网络
例如:创建名字为t-net的网络

docker network create -d bridge t-net  

#t-net为自己起的网络名称
其中,-d driver,网络类型,默认 bridge。 说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了
第二步:查看网络信息

  1. 列出所属有网络
docker network ls
  1. 查看网络信息
docker inspect 67d #67d 为创建的网络id

第三步:实现容器互联

  1. 创建容器
    打开终端,基于centos:7这个镜像启动容器,并加入到t-net这个网络
docker run -it --name app1 --network t-net centos:7

新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络

docker run -it --name app2 --network t-net centos:7
  1. 测试网络互通
    在两个终端中分别执行:
ping app1
ping app2

显示如下:

[root@35569c623c4c /]# ping app1
PING app1 (172.18.0.2) 56(84) bytes of data.
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
......

你可能感兴趣的:(docker,容器,运维)