Docker教程
docker换源{"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"],"ex
docker桌面版配置
换源
{
"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
}
}
更改镜像位置
配置
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首页
大家都知道安装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
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安装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
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
安装Rocketmq控制台
docker pull styletang/rocketmq-console-ng
启动Rocketmq控制台容器
- 先查看namesrv的ip,得到ip为172.17.0.2
获取docker容器的ip,进入到rmqnamesrv容器中,执行下面命令:
docker exec -it rmqnamesrv bash
cat /etc/hosts
- 再启动控制台容器
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
更多推荐
所有评论(0)