Docker

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 Docker概述:

  

官网
https://www.docker.com/
文档
https://docs.docker.com/
仓库地址
https://hub.docker.com/
其他相关文档(命令行)
https://docs.docker.com/reference/

框架图:

linux联网环境下的Docker安装

1.环境准备

CenterOS 7、 Docker Linux安装包

系统查看
uname -r

环境查看
cat /etc/os-release

 

 

配置阿里云镜像加速

 docker命令大全

https://www.runoob.com/docker/docker-command-manual.html

帮助命令
docker version
docker info
docker 命令 --help

镜像命令
2.docker search 镜像的名字 在docker hub 上面搜索镜像 -s 30 过滤30星以下的
3.docker pull 镜像名字 在阿里云上面下载镜像 docker pull redis:2.0 2.0标签 一般指2.0版本
4.docker rmi 镜像的名字 删除镜像 默认删除最新版本 也就是:latest版本 -f(force) 强制删除 可以删除多个 docker rmi -f $(docker images -aq) 删除所有的镜像


容器命令
1.新建并启动容器 docker run [OPTIONS] IMAGE [COMMAND][ARG...]
2. docker ps [options]查看正在运行的容器
3.docker start 容器id或容器name 启动容器 restart 重启
4 docker stop 容器id或容器name 停止容器
5.docker kill 容器id或容器name 强制停止容器
6.docker rm 容器id 删除已停止的容器     一次性可以删除多个 docker rm -f $(docker ps -aq) docker ps -a -q | xargs docker rm
7.docker logs -ft --tail 容器id 查看容器日志 t是加入时间戳 f跟随最新的日志打印 --tail 数字显示最后多少条
8.docker top 容器id 查看容器内运行的进程
9.docker inspect 容器id 查看容器内部细节
10.docker attach 容器id 进入到容器内部
11.docker exec -t 容器id ls -l /tmp 执行一条命令直接得到结果 docker exec -t 容器id /bin/bash 进入容器内部操作
12.docker cp 容器id:容器内路径 目的主机路径

常用其他命令
~后台启动容器 docker run -d 镜像名
~查看日志 docker logs -tf --tail 10 容器ID
~查看进程 docker top 容器ID
~查看容器历史 docker history 容器ID
~从容器拷贝到主机上 docker cp 容器ID:/home/文件名 主机目录路径
~commit镜像 docker commit -m="描述" -a="作者" 容器ID 目标镜像名:[TAG]
~镜像压缩 docker save -o 压缩文件名称 镜像名称:TAG
~压缩文件转镜像 docker load -i 压缩文件名称
~镜像添加标签 docker tag 镜像ID 目标镜像名:[TAG]
~容器数据卷
1)挂载 docker run -it -v 主机目录:容器目录 镜像名 /bin/bash
mysql:docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql.conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
2)具名挂载或匿名挂载
区分具名或匿名:docker volume ls
挂载目录查询:docker volume inspect 具名卷
3)通过dockfile文件生成镜像
docker build -f dockerfile1 -t centos:1.0 .
其中dockerfile1如下:
FROM centos
VOLUME ["colume01","colume02"]
CMD echo "-----end----"
CMD /bin/bash
4)多个数据卷共享
docker run -it --name docker02 --volumes-from docker01 centos:1.0
~创建虚拟网卡
docker network create redis --subnet 192.168.0.0/16
~建立桥接
docker network connect 容器名 容量名
~标记镜像为私有仓库的镜像
docker tag 备份镜像名:TAG 宿主机IP:5000/镜像名:TAG
~上传私有库
docker push 宿主机IP:5000/镜像名:TAG
~私有库下载到宿主机
docker pull 宿主机IP:5000/镜像名:TAG

 

 

DockerFile指令

 

 

 

 

 

 

 上传到阿里云镜像

 Docker流程

安装MySQL

#从镜像仓库里拉取对应版本的mysql镜像,此步可省略,在运行前也会先拉取对应版本镜像
docker pull mysql:5.7

docker run -p 3306:3306 --name mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root123 -d mysql:5.7

--创建数据库
create schema `数据库名` default character set utf8 collate utf8_general_ci;

--创建用户
create user '用户名'@'%' identified by '密码';

--用户授权数据库,*代表所有schema的所有数据库
grant all on *.* to `用户名`;
grant select,insert,update,delete,create on *.* to `用户名`;
  
--立即启用修改
flush privileges;
 
#mysql数据库备份
docker exec mysql容器ID sh -c ' exec mysqldump --all-databases -uroot -p"root123" ' > /root/mysql/init-databases.sql

安装Nginx

#从远程仓库拉取nginx
docker pull nginx

#创建一个测试nginx容器
docker run --name tmp-nginx-container -d nginx
#从容器拷贝配置文件到宿主机,如果本来就存在文件则不执行该操作
docker cp tmp-nginx-container:/etc/nginx/nginx.conf /root/nginx/nginx.conf
docker ps tmp-nginx-container:/etc/nginx/conf.d /root/nginx/conf.d
#删除测试容器
docker rm -f tmp-nginx-container

#创建nginx容器,挂载时root下对应文件不存在,测试时会报错
docker run --name nginx -p 80:80 -v /root/nginx/conf.d:/etc/nginx/conf.d -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/log:/var/log/nginx -d nginx

#测试
curl localhost
docker exec -it nginx bash

安装单机redis

#拉取redis
docker pull redis:3.2

#拷贝redis配置文件到/root/redis/conf目录下
/root/redis/conf/redis.conf

#后台运行redis,注意:不同版本的redis生成的dump.rdb文件可能不同,启动时会报错
docker run -p 6379:6379 -p 16379:16379 --name redis -v /root/redis/data:/data -v /root/redis/conf:/usr/local/etc/redis -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf

#测试
docker exec -it redis bash
cd /data
cd /usr/local/etc/redis/
docker exec -it redis redis-cli
get a
set a b
get a
quit

Redis集群部署

#创建网卡
docker network create redis --subnet 172.38.0.0/16
docker network ls
docker network inspect redis

#shell脚本创建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

#shell脚本启动redis群组
for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${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; \
done

#创建集群 分片+高可用+负载均衡
redis-cli --cluster create 172.38.3.11:6379 172.38.3.12:6379 172.38.3.13:6379 172.38.3.14:6379 172.38.3.15:6379 172.38.3.16:6379 --cluster-replicas 1

#测试
#进入任一redis容器
docker exec -it redis-1 /bin/sh
redis-cli -c
> cluster info
> cluster nodes
> set a b
> get a
#在宿主机将保存数据的容器停止
docker stop redis-3

#单个redis下载并安装
docker run -p 6379:6379 -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

#进入redis容器并打开redis客户端
docker exec -it redis容器ID redis-cli

安装mongodb

#拉取对应版本的mongo镜像
docker pull mongo:3.6.5

#创建mongo容器
docker run -p 27017:27017 --name mongo -v /root/mongo/data:/data/db -v /root/mongo/conf:/data/configdb -v /root/mongo/backup:/data/backup -d mongo:3.6.5

#查看是否启动成功
docker ps -a
mongo 192.168.3.128:27017 #在安装的mongo客户端的主机上查询
use test
db.test.insert({"name":"cap"})


#数据库备份
docker exec mongo sh -c 'exec mongodump --help'
docker exec mongo sh -c 'exec mongodump -h localhost --port 27017 -d test -c test -o /data/backup'

#数据库恢复,注意:原集合恢复不改名不需要设置-d 数据库 -c 集合 
docker exec mongo sh -c 'exec mongorestore --help'
docker exec mongo sh -c 'exec mongorestore -h localhost --port 27017 -d test2 -c test2 --dir /data/backup/test/test.bson'

安装带有libreoffice和jdk8的centos

参考文档:
https://www.jianshu.com/p/90dbf66c424a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
https://blog.csdn.net/qq_44470091/article/details/102517556

#root用户宿主机创建centos7-with-libreoffice目录
cd ~
mkdir centos7-with-libreoffice

#在http://mirrors.ustc.edu.cn/tdf/libreoffice/stable下载libreoffice的rpm安装包和语言包
LibreOffice_7.0.6_Linux_x86-64_rpm.tar.gz 和 LibreOffice_7.0.6_Linux_x86-64_rpm_langpack_zh-CN.tar.gz

#在https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html官网下载oracle下载安装包
jdk-8u301-linux-x64.tar.gz

#创建Dockerfile文件,内容如下:
#基于centos7版本镜像
FROM centos:7
	 
#以下设置中文语言环境与修改时区
ENV LANG=zh_CN.UTF-8 \
	LANGUAGE=zh_CN:zh \
	LC_ALL=zh_CN.UTF-8
RUN yum update -y && \
	yum reinstall -y glibc-common && \
	yum install -y telnet net-tools && \
	yum clean all && \
	rm -rf /tmp/* rm -rf /var/cache/yum/* && \
	localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
	ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
	 
#加入windows字体包
#ADD chinese.tar.gz /usr/share/fonts/
	 
#将下载好的包解压到相应文件下
ADD LibreOffice_7.0.6_Linux_x86-64_rpm.tar.gz /home/
ADD LibreOffice_7.0.6_Linux_x86-64_rpm_langpack_zh-CN.tar.gz /usr/
	 
#执行安装
RUN cd /home/LibreOffice_7.0.6.2_Linux_x86-64_rpm/RPMS/ \
	&& yum localinstall *.rpm -y \
	&& cd /usr/LibreOffice_7.0.6.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/   \
	&& yum localinstall *.rpm -y \	 
	\
	#安装依赖
	&& yum install ibus -y \		  
	#加入中文字体支持并赋权限
	&& cd /usr/share/fonts/ \
	&& chmod -R 755 /usr/share/fonts \
	&& yum install mkfontscale -y \
	&& mkfontscale \
	&& yum install fontconfig -y \
	&& mkfontdir \
	&& fc-cache -fv \
	&& mkdir /usr/local/java/ \
	\	 
	#清理缓存,减少镜像大小
	&& yum clean all
	 
#加入安装java环境
ADD jdk-8u301-linux-x64.tar.gz /usr/local/java/
RUN ln -s /usr/local/java/jdk1.8.0_301 /usr/local/java/jdk
	 
#配置环境变量
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
CMD ["bash"]

#上传LibreOffice和jdk的三个安装包和Dockerfile到centos7-with-libreoffice目录下
#可使用rz工具,安装方式yum -y install lrzsz

#创建带libreoffice的centos镜像
docker build -t centos:libreoffice .

#测试,记录此libreoffice的全路径,在java应用中需要使用
docker run -it --rm centos:libreoffice bash
cd /opt/libreoffice7.0
pwd

SpringBoot打包Docker镜像

1.搭建springboot项目

2.打包应用

3.编写Dockerfile(下载docker插件),放到项目目录下
FROM java:8

COPY *.jar /app.jar

CMD ["--server.port=8080"]

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

4.上传jar和Dockerfile,构建镜像
docker build -t app .
docker images
docker run -d -P --name app-springboot app
docker ps
curl localhost:38080/hello

5.发布运行

发布基于centos:libreoffice镜像的应用


#创建Dockerfile文件,内容如下
FROM centos:libreoffice

MAINTAINER crcc

ENV MYPATH /etc/iot_green

WORKDIR $MYPATH

COPY *.jar $MYPATH/app.jar
COPY *.properties $MYPATH/

RUN chmod 755 *

CMD ["--server.port=7000"]

EXPOSE 7000

VOLUME ["/etc/iot_green/Logs","/etc/iot_green/material","/etc/iot_green/product"]

ENTRYPOINT ["java","-jar","/etc/iot_green/app.jar"]

#修改application.properties等文件配置,例如:
spring.profiles.active=dev
jodconverter.local.office-home=/opt/libreoffice7.0
primary.mongodb.host=192.168.3.128

#打包应用为jar

#打开宿主机,创建目录
mkdir /root/app

#上传Dockerfile,*.properties,*.jar文件到/root/app目录

#创建green:1.0的镜像
docker build -t green:1.0 .

#创建green容器
docker run -p 7000:7000 --name green -v /root/green/log:/etc/iot_green/Logs -v /root/green/material:/etc/iot_green/material -v /root/green/product:/etc/iot_green/product -d green:1.0

#测试
docker exec -it green bash
http://192.168.3.128:7000

Docker Compose

 

 

 

 

 Docker私有仓库

Docker Swarm

#参考文档
https://www.runoob.com/docker/docker-swarm.html

#1.安装docker-machine,安装前需要先安装docker

#2.创建 swarm 集群管理节点(manager)
docker-machine create -d virtualbox swarm-manager

#3.管理节点关联到分配的IP
docker-machine ssh swarm-manager
docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip。

#4.创建 swarm 集群工作节点(worker)
docker-machine create -d virtualbox swarm-worker1
docker-machine create -d virtualbox swarm-worker2

#5.分别进入两个机器里,指定添加至上一步中创建的集群
docker-machine ssh swarm-worker1
docker swarm init --advertise-addr 192.168.99.108 #这里的 IP 为创建机器时分配的 ip。
docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

#6.部署服务到集群中(跟集群管理有关的任何操作,都是在管理节点上操作的)
docker service create --replicas 1 --name helloworld alpine ping docker.com

#查看 helloworld 服务运行在哪个节点上,可以看到目前是在 swarm-worker1 节点
docker service ps helloworld

#查看 helloworld 部署的具体信息
docker service inspect --pretty helloworld

#扩展集群服务
docker service scale helloworld=2

#删除服务
docker service rm helloworld
docker service ps helloworld

#滚动升级服务
#1)创建一个 3.0.6 版本的 redis
docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
#2)滚动升级 redis
docker service update --image redis:3.0.7 redis

#停止某个节点接收新的任务
#查看所有的节点
docker node ls
#停止节点 swarm-worker1
docker node update --availability drain swarm-worker1
#重新激活节点
docker node update --availability active swarm-worker1


 错误解决

~报错信息:IPv4 forwarding is disabled. Networking will not work.
解决办法:追加信息到00-system.conf后,重启docker网络服务,重启容器
echo 'net.ipv4.ip_forward=1'>>/usr/lib/sysctl.d/00-system.conf
systemctl restart network

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值