Docker教程

docker桌面版配置

换源
Docker教程_第1张图片

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
 "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

更改镜像位置
Docker教程_第2张图片
Docker教程_第3张图片

配置
https://www.cnblogs.com/kankankanfuke/articles/15362887.html

基本概念

仓库

拉取镜像的地方。

镜像

应用实例,比如mysql,镜像必须运行在容器上。
一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了mysql或用户需要的其他应用程序。

容器

容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。

Docker数据卷

首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层以及在顶部的读写层的组合被称为Union FIle System(联合文件系统)。

为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。

数据卷(挂载点/卷)的特性

  • 数据卷 可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

基本命令

拉取镜像

docker pull 镜像名称(对应上步操作结果中的NAME值):版本号

[root@iZx4xwfjh1zsdsZ /]# docker pull tomcat:8.0
Using default tag: latest
latest: Pulling from library/tomcat
54f7e8ac135a: Pull complete 
d6341e30912f: Pull complete 
087a57faf949: Pull complete 
95065f220961: Pull complete 
0887630ce576: Pull complete 
c375d1959fab: Pull complete 
e00a5e6055cc: Pull complete 
8319f5fb56cf: Pull complete 
258c74eb25ab: Pull complete 
6eb86d11d371: Pull complete 
adb5a4a6adf5: Pull complete 
4685b434f297: Pull complete 
Digest: sha256:e394c2f94eee344300e68d7183f3f19d272316f9691b280ac0e3911ea610e590
Status: Downloaded newer image for tomcat:latest
[root@iZx4xwfjh1zsdsZ /]# 

创建容器

容器启动命令:
docker run --name 自定义名称 参数1 -p 参数2 -v 宿主机与容器交互的目录文件 -d 镜像名称

docker run --name tomcat -p 8080:8080 -v /usr/test:/usr/local/tomcat/webapps/test -d tomcat
或
docker run --name mytomcat -it -d -p 8080:8080 tomcat(#在后台启动tomcat容器,容器名称为my_tomcat,虚拟机端口号为8080,tomcat默认端口号为8080

启动成功!

参数解释:

–name tomcat
表示上一步安装的镜像名称

-p 8080:8080
表示将容器的8080port映射到本机的8080port端口

-v /usr/test:/usr/local/tomcat/webapps/test
表示将本机下的usr目录下的test文件夹映射到容器tomcat的webapps文件夹下

-d tomcat
表示在后台守护进程(即让软件作为长时间服务运行)的方式启动(不进入后台启动),指定上一步安装的镜像名称

进入容器

docker exec -it 容器id /bin/bash

进入redis客户端:
docker exec -it myredis redis-cli

容器中设置挂载点

有三种方式:

通过docker run命令

1.运行命令:docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash
其中的 -v 标记 在容器中设置了一个挂载点 /data(就是容器中的一个目录),并将主机上的 /home/xqh/myimage 目录中的内容关联到 /data下。
这样在容器中对/data目录下的操作,还是在主机上对/home/xqh/myimage的操作,都是完全实时同步的,因为这两个目录实际都是指向主机目录。
2.运行命令:docker run --name test1 -it -v /data ubuntu /bin/bash
上面-v的标记只设置了容器的挂载点,并没有指定关联的主机目录。这时docker会自动绑定主机上的一个目录。通过docker inspect 命令可以查看到。

xqh@ubuntu:~/myimage$ docker inspect test1
[
{
   "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",
.............................
   "Mounts": [
       {
           "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",
           "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",
           "Destination": "/data",
           "Driver": "local",
           "Mode": "",
           "RW": true
       }
   ],

上面 Mounts下的每条信息记录了容器上一个挂载点的信息,“Destination” 值是容器的挂载点,"Source"值是对应的主机目录。可以看出这种方式对应的主机目录是自动创建的,其目的不是让在主机上修改,而是让多个容器共享。

通过dockerfile创建挂载点

上面介绍的通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。还有一个区别是,通过 VOLUME 指令创建的挂载点,, 无法指定主机上对应的目录,是自动生成的

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

上面的dockfile文件通过VOLUME指令指定了两个挂载点 /data1 和 /data2.
我们通过docker inspect 查看通过该dockerfile创建的镜像生成的容器,可以看到如下信息,可以看到两个挂载点的信息。

"Mounts": [
    {
        "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",
        "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",
        "Destination": "/data1",
        "Driver": "local",
        "Mode": "",
        "RW": true
    },
    {
        "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",
        "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",
        "Destination": "/data2",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
],

容器共享卷(挂载点)

下面我们创建另一个容器可以和test1(已经创建好的容器)共享 /data1 和 /data2卷,这是在 docker run中使用 --volumes-from标记,如:
可以是来源不同镜像,如:
docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash
也可以是同一镜像,如:
docker run --name test3 -it --volumes-from test1 myimage /bin/bash
上面的三个容器 test1 , test2 , test3 均有 /data1 和 /data2 两个目录,且目录中内容是共享的,任何一个容器修改了内容,别的容器都能获取到。

使用容器

远程访问Tomcat首页
Docker教程_第4张图片
大家都知道安装Tomcat之前一定要安装JDK,但是我的服务器是新买的,只安装了Docker。因为Tomcat镜像已经把Tomcat的所有依赖项都打包到这个镜像中,所以我们只需要下载镜像就OK了,其他镜像也是一样的!

注:这步有的人可能会访问不到,如果之前的安装步骤都正确无误,就检查以下两点:

(1)服务器是否打开了这个端口,或者可以直接关闭防火墙(生产环境不建议)

     关闭默认防火墙命令:systemctl stop firewalld.service

(2)官方服务器购买站(阿里云、腾讯)是否对当前服务器开放了这个端口(如:安全组规则是否打开了这个端口)

idea+docker

https://www.awaimai.com/2608.html

docker修改容器配置

run时候已经进行绑定操作

在启动容器的时候可以通过 -v双向绑定本地的某文件,这样任意修改哪一个都会同步变化
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

修改未绑定的配置文件

docker inspect [容器名称]
docker inspect redis

拷贝容器内外的文件操作

进入容器,加入我们要修改的文件时cptest.txt
Docker教程_第5张图片

https://blog.csdn.net/weixin_44153921/article/details/121773037

其他常用命令

查看已经在运行的所有容器

docker ps -a

查看容器的内外端口映射

docker port 容器ID :

查看容器的日志

docker logs 容器ID :

开启容器

docker start 容器ID :

进入容器

docker exec -it 容器id /bin/bash

退出容器

ctrl+D

关闭容器(未删除)

docker stop 容器ID :

删除对应的容器

docker rm 容器ID :
注:删除之前必须要stop,否则删不掉的

查看机器上所有的镜像

docker images :

删除对应的镜像(注:删除之前必须停止或删除它创建的所有容器

docker rmi 镜像ID :

将指定的镜像打包

docker save 镜像ID -o 文件 :
(例:docker save ef6a7c98d192 -o /home/wuyongfei/springboot-demo.tar)

将指定的镜像移植到另外一台机器上在Docker中进行加载

docker load -i 文件夹名称(自定义):
再按照上面的步骤三查看镜像,启动容器就实现了Docker镜像的移植(例:docker load -i springboot-demo.tar)

docker入门教程

docker安装rocketmq

拉取镜像
docker pull rocketmqinc/rocketmq

启动服务
rocketmq 有2个服务需要启动:namesrv 和 broker

1 启动namesrv服务
docker run -d -p 9876:9876 -v D:\work\docker_dev\vm-data\data\namesrv\logs:/root/logs -v D:\work\docker_dev\vm-data\data\namesrv\store:/root/store --name rmqnamesrv -e “MAX_POSSIBLE_HEAP=100000000” rocketmqinc/rocketmq:4.4.0 sh mqnamesrv

Docker教程_第6张图片

2 启动broker服务
docker run -d -p 10911:10911 -p 10909:10909 -v D:\work\docker_dev\vm-data\data\broker\logs:/root/logs -v D:\work\docker_dev\vm-data\data\broker\store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e “NAMESRV_ADDR=namesrv:9876” -e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq:4.4.0 sh mqbroker
Docker教程_第7张图片
安装Rocketmq控制台
docker pull styletang/rocketmq-console-ng  
启动Rocketmq控制台容器

  1. 先查看namesrv的ip,得到ip为172.17.0.2

获取docker容器的ip,进入到rmqnamesrv容器中,执行下面命令:

docker exec -it rmqnamesrv bash
cat /etc/hosts

Docker教程_第8张图片

  1. 再启动控制台容器

docker run -e “JAVA_OPTS=-Drocketmq.namesrv.addr=172.17.0.2:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false” -p 8080:8080 -t styletang/rocketmq-console-ng

RocketMQ在windows环境下的搭建安装
参考1

参考2

实例

你可能感兴趣的