admin管理员组文章数量:1639831
Docker
- ①基础部分
- 一、是什么?
- 二、安装
- *(1)阿里云服务器*
- 1、卸载旧的版本
- 2、安装需要的安装包
- 3、设置镜像仓库
- 4、安装docker相关
- (1)建议先更新yum软件包索引
- (2)安装docker
- 5、启动docker
- 6、查看docker是否启动成功
- 7、测试hello-world
- 8、查看已下载的镜像
- 9、补充
- 1、阿里云镜像加速
- *(2)centos6.8安装Docker*
- (3)docker离线安装
- (4)docker打成离线tar包
- 三.卸载
- 1、卸载依赖
- 2、删除资源
- 四、docker常用命令
- 1、帮助命令
- 2、镜像命令
- 3、容器命令
- 4、常用其他命令
- 5、命令小结
- ②练习部分
- 一、Docker安装nginx
- 二、Docker安装tomcat
- 三、思考
- 四、docker安装mysql
- 五、docker安装postgres
- 六、docker安装mongo
- 七、docker安装redis
- ③docker可视化工具(平时不用)
- 一、portainer
- 二、rancher持续集成/部署使用
- ④docker镜像的自定义
- 一、提交镜像
- 二、容器数据卷
- 三、Dockerfile
- 1、构建docker镜像的构建文件,命令参数脚本!
- 2、制作自己的tomcat镜像
- 四、docker网络相关知识
- 1、docker0
- 2、自定义网络
- 3、更改docker ip
- 五、Docker部署redis集群
- 六、springboot微服务项目打包Docker镜像
- 学习视频
- ⑤docker进阶
- 一、Docker Compose
- 二、实战springboot项目上线
官方文档
①基础部分
一、是什么?
官网安装说明文档地址
官网命令文档地址
docker常用命令博客:40 张图详解 Docker 容器监控
二、安装
(1)阿里云服务器
1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装需要的安装包
yum install -y yum-utils
3、设置镜像仓库
国外镜像,很慢,不建议使用:
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
建议使用国内阿里云镜像:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装docker相关
(1)建议先更新yum软件包索引
yum makecache fast
(2)安装docker
说明:1、命令中的docker-ce 代表社区版,docker-ee代表企业版,建议使用社区版
2、默认安装最新版本,如果需要指定版本可以使用yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
yum install docker-ce docker-ce-cli containerd.io
5、启动docker
systemctl start docker
6、查看docker是否启动成功
docker version
7、测试hello-world
docker run hello-world
8、查看已下载的镜像
docker images
9、补充
1、阿里云镜像加速
(2)centos6.8安装Docker
第二步改成:yum install https://get.docker/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
(3)docker离线安装
- 下载docker安装包
官方地址:https://download.docker/linux/static/stable/x86_64/docker-19.03.9.tgz
我已经下载好的资源:docker安装包 - 解压缩:tar -zxvf docker-19.03.9.tgz
- 解压的docker文件夹全部移动至/usr/bin目录:
cp -p docker/* /usr/bin
- 将docker注册为系统服务
① 在/usr/lib/systemd/system/目录下,创建docker.service文件
② 编辑docker.service文件: vi /usr/lib/systemd/system/docker.service,粘贴如下内容
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd \
-H tcp://0.0.0.0:4243 \
-H unix:///var/run/docker.sock \
--selinux-enabled=false \
--log-opt max-size=1g --iptables=true
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 重启生效
重启守护进程:systemctl daemon-reload、systemctl start docker
查看docker状态:systemctl status docker
设置开机启动:systemctl enable docker
docker version,验证是否安装成功
(4)docker打成离线tar包
打包命令:sudo docker save -o elasticsearch:8.5.0.tar elasticsearch:8.5.0
打包多个:docker save -o docker.tar postgres:latest minio/minio:latest nginx:latest mysql:5.7 mongo:latest elastic/metricbeat:7.13.0 elasticsearch:7.13.0 tomcat:9.0.41-jdk8-corretto logstash:7.4.0
加载命令:docker load --input postgres.tar
三.卸载
1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2、删除资源
rm -rf /var/lib/docker # /var/lib/docker docker的默认工作路径
四、docker常用命令
1、帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能帮助命令
2、镜像命令
docker images -a # 查看本机所有镜像
docker search mysql # 搜索mysql镜像
docker pull mysql:5.7 # 下载镜像
docker rmi -f 容器id #删除镜像
3、容器命令
docker pull centos
docker ps # 正在运行的容器
docker ps -a # 运行过的所有容器
docker rm -f $(docker ps -q) #遍历删除所有容器
4、常用其他命令
docker logs -ft --tail 10 b38c72cb0c9f #查看镜像id为b38c72cb0c9f的十行日志
docker inspect b38c72cb0c9f #查看id为b38c72cb0c9f的镜像(容器)详细信息
docker exec -it b38c72cb0c9f /bin/bash # 进入容器后开启一个新的终端(进去后可操作容器)
docker attach b38c72cb0c9f # 进入容器中正在运行的终端(不会启动新的进程)
5、命令小结
②练习部分
一、Docker安装nginx
docker search nginx # 搜索nginx
docker pull nginx # 下载nginx
docker run -d --name nginx01 -p 3344:80 nginx # docker启动nginx,-d后台运行,--name名称,-p宿主机端口:容器内部端口
curl localhost:3344 # 访问本机3344
docker exec -it nginx01 /bin/bash # 进入nginx
whereis nginx # 查找nginx
# 挂载相关目录 注意参数--network host 将网络映射出来,在nginx.conf配置文件里面, nginx静态资源配置在容器内部/usr/share/nginx/html,而不是服务器的/usr/local/project/nginx/html,比如下图
docker run --name nginx -e TZ="Asia/Shanghai" -d -p 8021:8021 --network host -v /usr/local/project/nginx/html:/usr/share/nginx/html -v /usr/local/project/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/project/nginx/conf:/etc/nginx/conf.d -v /usr/local/project/nginx/logs:/var/log/nginx nginx:1.12.1
二、Docker安装tomcat
docker run -it --rm tomcat:9.0 # 启动tomcat,用完即删,ps查不到,建议只当测试用
docker pull tomcat:9.0 # 先下载,再启动,建议使用
docker run -d -p 3344:8080 --name tomcat01 tomcat # 启动tomcat
docker exec -it tomcat01 /bin/bash # 进入容器,访问3344
三、思考
每次修改nginx配置都得进入到容器内,很麻烦,能不能在宿主机上修改然后映射到容器内? -v 数据卷
四、docker安装mysql
完整的docker+springboot+mysql部署
docker run -itd --name mysql -v /usr/local/project/mysql/data:/var/lib/mysql -v /usr/local/project/mysql/conf:/etc/mysql/conf.d -v /usr/local/project/mysql/logs:/var/log/mysql -p 3357:3306 -e MYSQL_ROOT_PASSWORD=123321Frq mysql:5.7
五、docker安装postgres
docker run --name postgres -v /usr/local/project/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123321Frq -d -p 5432:5432 kartoza/postgis:12.1
修改pg最大连接数?
1、如果运行pg的时候没有挂载配置文件,可以进到容器内部进行修改配置
2、如果容器内部没有vim命令,需要用docker exec -it --user root 1837cf8cd4b9 /bin/bash
以管理员身份进入,依次执行apt-get update
、apt-get install vim
等待安装成功即可
3、如果是内网环境,就只能挂载文件了
六、docker安装mongo
新建如下文件夹:
conf文件夹下新建mongo.conf
,内容如下:
dbpath = /usr/local/project/mongo/data #数据文件存放目录
logpath = /usr/local/project/mongo/log/ #日志文件存放目录
port = 27017 #端口号
fork = true #以守护程序的方式启用,即在后台运行
maxConns=500 #最大同时连接数
journal=true #每次写入会记录一条操作日志
logappend=true #使用追加方式写日志
auth=true #是否需要登录认证,配置账号密码需要开启,这里注释掉
noauth=true #不启用验证
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip=0.0.0.0 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
启动命令:
docker run -d \
--name mongo \
-p 27017:27017 \
-v /usr/local/project/mongo/data:/data/db \
-v /usr/local/project/mongo/conf:/data/conf \
-v /usr/local/project/mongo/log:/data/log \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123321Frq \
--privileged=true \
--restart always \
mongo:4.2
七、docker安装redis
先去下载个对应版本的配置文件redis官网,拷贝到你的文件夹
#redis –restart=always 总是开机启动 –log是日志方面的 -p 6379:6379 将6379端口挂载出去 –name 给这个容器取一个名字 -v 数据卷挂载 -d redis 表示后台启动redis –appendonly yes 开启redis 持久化 –requirepass 000415 设置密码
docker run --restart=always --log-opt max-size=256m --log-opt max-file=2 -p 6379:6379 --name redis -v /usr/local/project/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/project/redis/data:/data -d redis:5.0.14 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123321Frq
③docker可视化工具(平时不用)
一、portainer
docker run -dit -p 3344:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
二、rancher持续集成/部署使用
④docker镜像的自定义
一、提交镜像
所有应用都可以打包成docker镜像,直接部署
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG] # 提交容器成为一个新的副本,与git原理类似
二、容器数据卷
容器之间数据共享,数据存放在宿主机。
# 挂载宿主机某目录比如/docker/dms/service_engine_lucene/data,到容器某目录比如/usr/share/elasticsearch/data,
#按以下步骤依次进行,每步必须执行
(1)将宿主机的文件夹赋予权限
chmod -R 777 /docker/dms/service_engine_lucene/data
(2)将容器内的目录赋予特权
(2-1)保证容器启动的前提下,进入容器内部
docker exec -it e96cd2bab23d /bin/bash或者以管理员身份进入( docker exec -it -u root 3718f73b385e bash)
(2-2)添加selinux规则,将要挂载的目录添加到白名单
chcon -Rt svirt_sandbox_file_t /usr/share/elasticsearch/data
(2-3)退出容器
exit;
(3)执行挂载命令docker run -it -v /home/ceshi:/home centos /bin/bash # docker run -it -v 主机目录:容器内目录 镜像名称
docker run -it -v /docker/dms/service_engine_lucene/data:/usr/share/elasticsearch/data elasticsearch:7.13.0
(4)如果挂载过程仍出现文件找不到异常(Exception in thread "main" java.nio.file.NoSuchFileException:
/usr/share/elasticsearch/config/jvm.options),手动拷贝后再执行挂载命令
docker cp elasticsearch:/usr/share/elasticsearch/config /docker/dms/service_engine_lucene/
(5)启动es
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.13.0
具名和匿名挂载
三、Dockerfile
1、构建docker镜像的构建文件,命令参数脚本!
dockerfile的指令(一定要大写!):
FROM #from 基础镜像,一切从这里构建
MAINTAINER #maintainer 镜像是谁写的,姓名+邮箱
RUN #run 镜像构建的时候需要运行的命令
WORKDIR #work dir镜像的工作目录
VOLUME #volume挂载的目录
EXPOSE #expose暴露的端口配置
CMD #cmd指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #entry point指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #on build当构建一个被继承的 ,dockerfile就会运行ONBUILD的指令。触发指令
COPY #copy类似ADD,将文件拷贝到镜像中
ENV #env设置环境变量
构建步骤:
1、编写一个dockerfile
2、docker build构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(dockerHub、阿里云镜像仓库)
根据上面四步,实现小demo(安装centos并安装vim及网络相关命令)
第一步:编写一个dockerfile
vim myDockerFile001 #内容如下:
FROM centos
MAINTAINER EricFRQ<www.1726894668@foxmail.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
ONBUILD RUN echo "i am build now"
i #进入编辑模式
esc+:wq #保存并退出
第二步:docker build构建成一个镜像
docker build -f myDockerFile001 -t mycentos:0.1 . #编译dockerfile,注意后面有个点
第三步:测试运行
docker run -it mycentos:0.1 #运行制作的mycentos
cmd和entrypoint的区别
第四步:发布镜像
(1)发布到dockerHub
- 进入官网注册账号:https://hub.docker/
- docker登录
- push到dockerHub
(2)发布到阿里云镜像
2、制作自己的tomcat镜像
四、docker网络相关知识
1、docker0
两个容器之间是可以ping通的
2、自定义网络
3、更改docker ip
docker的默认ip是172.17.0.1,当其网段与局域网段冲突时就需要手动更改.方法如下:
输入以下命令:
systemctl stop docker
sudo vim /etc/docker/daemon.json
在daemon.json中输入:
{
"registry-mirrors": ["https://00s5k4m1.mirror.aliyuncs"],"bip": "192.168.12.1/16"
}
保存后运行:
systemctl start docker
五、Docker部署redis集群
# 创建网卡
docker network create redis --subnet 172.38.0.0/16
# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
# 通过脚本运行六个redis
for port in $(seq 1 6);\
docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker exec -it redis-1 /bin/sh #redis默认没有bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
-
创建redis网络并通过脚本创建6个redis配置文件
-
启动六个redis
-
进入redis-1
使用集群方式创建集群(三从三主)此步输入yes
-
连接进入redis集群
-
查看主从信息
-
测试添加值
六、springboot微服务项目打包Docker镜像
1、新建Dockerfile(注意名称大小写),内容如下
#设置运行所需的java环境
FROM openjdk:8-jre
#设置指向了容器内的/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,
#Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下
#创建一个临时文件并把它链接到容器中的/tmp目录。
#注意:VOLUME 命令只能指定挂载点,也就是说在此处,只能指定容器内的目录,不能指定宿主机上对应的目录,
#也就是说是宿主机上自动生成的目录 去挂载了 容器内的指定的/tmp目录!!!
#如果想要指定宿主机的目录去进行挂载,只能通过run命令中的 -v参数进行 宿主机的指定目录挂载容器内的指定目录
VOLUME /tmp
#设置作者名称
MAINTAINER EricFRQ
#将此路径下所有的jar包都添加到镜像中,并重命名为system.jar
ADD *.jar system.jar
#添加启动镜像时的命令,这里仅设置了启动默认端口
CMD ["--server.port=10012"]
#设置对外暴露的端口
EXPOSE 10012
#ENTRYPOINT 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
#-Djava.security.egd=file:/dev/./urandom
#添加java.security.egd的系统属性指向/dev/urandom,JVM上的随机数与熵池策略
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dport=10012","-jar","/system.jar"]
2、上传自己的jar和DockerFile到服务器某同一目录下
3、进入上传的目录,编译DockerFile,命令如下
docker build -t system . #后面一定要有个 .
4、查看是否编译成功并运行测试
docker images
5、后台运行
docker run --name system -itd --net=host system
需要注意spring boot项目的时区问题:时区问题解决方案
6、上传镜像
学习视频
【狂神说Java】Docker最新超详细版教程通俗易懂
⑤docker进阶
下半场
一、Docker Compose
简介:定义运行多个容器
关于compose的官方文档说明
二、实战springboot项目上线
- 编写springboot项目,其中使用到了redis
- 修改application.properties关于redis的配置
server.port=8080
server.redis.host=redis # 这里在服务器上就是使用域名访问
- 将项目打包成jar,在同一个文件夹下操作以下步骤
- 编写Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 编写docker-compose.yml编排项目
version: '3.8'
services:
myapp:
build: . # 指定为当前目录下的Dockerfile,也可以在下面指定自己的Dockerfile文件,dockerfile:MyDockerfile
image: myapp # 自己起名即可
depends_on:
- redis # 依赖于redis
ports:
- "8080:8080"
redis: # redis服务
image: "redis:alpine"
# mysql:... 如果还依赖于mysql,在下面其他依赖的服务即可
- 将上面的jar、Dockerfile、docker-compose.yml上传至安装了docker和docker-compose的服务器,使用命令
docker-compose up
启动或docker-compose up --build
先构建再启动 自己的compose
本文标签: Docker
版权声明:本文标题:Docker学习使用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729298218a1194857.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论