Docker技术

@【toc】目录

一、Docker技术简介:

1.概述:

2.核心对象

二、Docker安装(离线)

三、Docker服务基本操作

四、Docker镜像操作实践

五、Docker容器操作实践

六、Docker数据管理实践

1.概述

2.数据卷

3.挂载主机目录

七、Dockerfile 及镜像制作实践

1.准备工作

2.Dockerfile文件

八、Docker镜像安装实践

1.安装、登陆Mysql数据库

2.安装Redis数据库

3.安装Ngnix代理

4.安装Nacos组件

 九、Docker容器互联实践

1.概述

2.新建网络


#一、Docker技术简介:

#1.概述:

Docker是一个虚拟化平台( 官网https://www.docker.com/),基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

#2.核心对象

镜像(Image):Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等,可以暂时先将其理解为一个安装程序。
容器(Container):Docker容器可以将其理解为一个运行镜像的载体,镜像和容器的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。

#二、Docker安装(离线)

第一步:下载dockers离线包

https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz

第二步:下载离线安装工具

https://github.com/Jrohy/docker-install/

第三步:在linux环境下,创建/root/setup/docker目录,将安装工具解压放入目录

第四步:执行安装操作

进入文件夹:  cd /root/setup/docker

为install.sh添加执行权限:  chmod   +x   install.sh

安装:   ./install.sh   -f    docker-20.10.6.tgz

第五步:安装成功后检查安装状态

docker  info

#三、Docker服务基本操作

启动docker服务:  systemctl    start   docker

查看Docker状态:  systemctl    status   docker

设置Docker开机自启:   systemctl    enable   docker

禁用Docker开机自启:   systemctl    disable   docker

重新启动Docker服务:   systemctl     restart    docker

查看Docker信息:         docker   info

查看docker info  中具体key的信息:  docker  info |  grep  'Docker   Root   Dir:'

停止Docker服务:     systemctl     stop    docker

Docker镜像加速:修改配置文件 /etc/docker/daemon.json ,设置好后需要重启docker服务

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

#四、Docker镜像操作实践

下载镜像: docker  pull   hello-world  (hello-world为镜像名,以它为例)

浏览镜像文件:  docker   images

查看镜像详情:   docker   inspect   hello-world

查看镜像历史:  docker   history    hello-world

导出镜像文件(从linux下载到本地): docker   save  hello-world | gzip > hello-world.tar.gz

删除镜像文件:  docker  image  rm  hello-world   

导入镜像操作:   docker  load < hello-world.tar.gz

运行镜像文件:   docker  run   hello-world

#五、Docker容器操作实践

下载镜像: docker  pull  centos:7     (以CentOS镜像为例)

查看景象文件:  docker  images

创建并启动容器: docker  run  -it   centos:7   bash

查看docker运行中的容器:docker  ps

查看docker运行中的所有容器:docker  ps   -a

查看容器日志信息: docker  container  logs   802    (802为容器id前三位)

停止运行的容器: docker  container  stop  802

重新启动容器:  docker   container   restart   802

进入指定容器:  docker  exec  -it   802   bash

退出容器:   exit

删除容器:  docker   container   rm   802   (如果删除运行中的容器需要添加-f参数)

清理所有终止状态容器:  docker   container   prune

#六、Docker数据管理实践

#1.概述

在容器中管理数据主要有两种方式:

1)挂载主机目录 (Bind mounts)-最常用 (docker run -v 宿主机目录:容器目录)

2)数据卷(Volumes)

#2.数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

创建数据卷:  docker  volume  create  container-vol

查看所有数据卷:  docker   volume  ls

查看指定数据卷的信息:  docker  volume  inspect  container-vol

启动挂载数据卷的容器: docker run -it -v container-vol:/root centos:7 bash

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

删除数据卷: docker  volume  rm  container-vol (数据卷被使用时无法删除)

清理无主数据卷:docker  volume  prune

#3.挂载主机目录

在启动容器时,目录直接挂载:docker  run  -it  -v /usr/app:/opt/app  centos:7  bash

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

查看挂载目录信息: docker  inspect  91a   (91a为容器id)

#七、Dockerfile 及镜像制作实践

#1.准备工作

1)centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像)

2)jdk压缩包 jdk-8u51-linux-x64.tar.gz,基于此压缩包,制作jdk镜像

#2.Dockerfile文件

1)文件与资源在一个目录下,通过vim打开文件,将以下指令复制进去

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']

2)使用Dockerfile构建镜像: docker  build  -t  jdk:8  .

注:末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。1)

3)运行镜像文件: docker  run   -it   jdk:8   bash

4)查看环境变量: echo ¥PATH

     查看JDK版本信息: java -version

#八、Docker镜像安装实践

#1.安装、登陆Mysql数据库

 网上拉取mysql: docker  pull   mysql:8.0.23

(注:本地导入: docker  load  <  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  exec   -it   mysql   bash

登陆: mysql   -uroot   -proot

停止mysql服务: docker  stop   mysql

启动mysql服务: docker  start   mysql

设置mysql开机自启: docker  update  mysql   --restart=always

#2.安装Redis数据库

下载镜像文件: docker  pull   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

控制台直接连接redis测试:  docker  exec  -it   redis01  redis-cli

检测redis版本:  redis-server   -v    或者   redis-cli   -v

停止redis服务: docker  stop   redis01

启动redis服务:  docker   start   redis01

重启redis服务:  docker  restart   redis01

#3.安装Ngnix代理

拉取ngnix镜像:  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服务: docker  stop  nginx

启动nginx服务: docker  start   nginx

重启nginx服务: docker restart  nginx

#4.安装Nacos组件

拉取nacos: docker  pull  nacos/nacos-server:1.4.1

mysql中执行nacos的sql脚本:

1)将此文件nacos-mysql.sql拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)

2)在linux环境下启动并登录mysql

进入mysql容器(前提是mysql已启动): docker  exec  -it  mysql   bash

登陆mysql:  mysql   -uroot   -p

通过source指令运行容器目录下的sql文件: source /容器目录/nacos-mysql.sql

创建并启动nacos容器:

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.227.131(需要修改本机ip) \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=jason (需要修改)\
-e MYSQL_SERVICE_PASSWORD=jason (需要修改)\
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1

开机自启容器(需要设置docker为开机自启):  --restart=always

检查nacos服务: docker   ps

检查启动日志:  docker  container   logs  nacos

(注:nacos的启动日志在/home/nacos/logs/start.out文件中)

停止nacos服务: docker  stop  nacos

启动nacos服务: docker  start  nacos

重启nacos服务: docker  restart  nacos

 #九、Docker容器互联实践

#1.概述

Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql

Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。

#2.新建网络

1)创建名字为t-net的网络: docker  network  create  -d  bridge  t-net

2)列出所有网络: docker  network   ls

3)查看网络信息:  docker   inspect   67d   (67d为创建的网络id)

4)创建容器(基于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 

5)测试网络互通:  ping  app1   /    ping   app2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值