1、Docker官网www.docker.com
2、找到安装指引,先卸载旧版本Docker![](https://img-blog.csdnimg.cn/direct/1f8ab792112b47eaa863faf663bd57b8.png)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3、安装需要的工具
sudo yum install -y yum-utils
4、设置镜像仓库,默认是国外的,不推荐(很慢)。
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如下为阿里云docker镜像地址
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、更新yum软件安装包索引
yum makecache fast
6、安装docker相关的依赖。-ce表示社区版
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
7、启动docker
systemctl start docker
8、可以打印docker版本验证是否安装成功
docker version
如下图正确打印版本信息即安装成功
镜像加速器
9、docker安装es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
以上方法为正常安装,但是es是重量级框架,内存耗用多。可参考如下安装方式限制es的内存为64M-512M之间。
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms64m -Xmx512m" elasticsearch:7.6.2
安装kibana注意一下几点:
1、kibana的版本必须和es版本一致。
2、若kibana和es不在同一服务器(ip)上,kibana配置文件kibana中指向es的ip地址需修改成kibana的实际ip(es容器的id,可用docker inspect es容器名 命令查看es的ip)。
3、某些版本kibana容器内部不存在vim命令,需要使用root权限安装,或者启动kibana容器时使用-v命令挂载kibana容器内/bin/bash/config/文件夹到宿主机,操作宿主机中的kibana.yml文件。
安装head数据查看工具,参考地址
10、docker可视化界面portainer
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
11、提交自己的镜像到本地,原镜像启动的容器修改某些内容后据此生成新的镜像
命令和git类似
docker commit -m "提交的信息描述" -a "作者" 容器id 目标镜像名:tag版本
例:默认pull的tomcat镜像webapps目录是没有文件的,将webapps.dict目录中的文件全部拷贝到webapps后,希望形成一个新的镜像,可使用如下命令:
docker commit -m "add webapps file" -a="xiesijie" 78b4def2ce64 my-tomcat:1.0
12、创建mysql容器 并挂载config和data目录。文件挂载可理解为双向绑定,容器即使停止了,数据也能双向绑定。容器删除后,宿主机对应的文件不会删除。在容器内部执行删除目录后,宿主机映射的文件也会删除。
docker run -d -p 3306: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
如上命令:
-d 表示后台启动 -p 表示端口映射 -v 表示宿主机和容器内部文件挂载
冒号前为宿主机目录,后为docker目录 -e 表示配置,上示代码为配置mysql root用户密码
--name 表示容器名称 mysql:5.7 表示镜像名及版本号
13、匿名挂载、具名挂载、指定路径挂载
容器内地址可以配置 ro rw。 ro即readonly 只读(容器内只读,宿主机挂载地址可编辑),rw即read write 可读可写(不写默认)。
此处切记:使用宿主机路径挂载时会覆盖容器内挂载目录。若容器内挂载目录非空文件,可先备份,或者才有匿名挂载、具名挂载方式。备份如下:
#从 容器
0b5e6db9316a
复制/usr/src/app
目录到宿主机的/usr/docker/eshead
docker cp 0b5e6db9316a:/usr/src/app /usr/docker/eshead
14、docker 数据卷容器,多个容器挂载的数据互通
docker run -d -it --name centos-05 --volumes-from centos-02 centos
--volumes-from 表示新启动的容器centos-05继承 centos-02的全部卷,共享。即使centos-02容器删除,共享的内容也还在。只有没有任何一个容器使用卷了,共享的卷才会删除。
15、dockerFile指令
注意docker中如果是cmd命令,容器启动时最后加的命令是替换dockerfile中的
entrypoint则是追加。两者都是只有最后一行生效。
16、创建dockerFile
FROM centos:7 #镜像基础,基于centos:7
MAINTAINER xiesijie<2285735606@qq.com> #镜像作者及邮箱ENV MYPATH /usr/local #环境配置 此处配置了一个地址
WORKDIR $MYPATH #指定上面地址为工作地址RUN yum -y install vim #安装vim命令
RUN yum -y install net-tools #安装网络命令 如ifconfigEXPOSE 80 #暴露端口
CMD echo $MYPATH #打印配置的目录
CMD echo "---------end----------" #打印end
CMD /bin/bash #进入后台
dockerFile创建好后用如下命令构建
docker build -f docker-centos -t mycentos-02:1.0 .
-f 即dockerFile -t 即构建的目标对象名称 1.0版本 注意后面需要加一个 点 .
17、构建tomcat dockerFile
DockerFile文件:
FROM centos:7
MAINTAINER xiesijie<2285735606>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.35.tar.gz /usr/local/RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib.tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.35
ENV CATALINA_BASH /usr/loacl/apache-tomcat-8.5.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.35/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.35/usr/logs/catalina.out
启动示例
docker run -d -p 9090:8080 --name xiesijietomcat-a -v /home/xiesijie/build/tomcat/test:/usr/local/apache-tomcat-8.5.35/webapps/test -v /home/xiesijie/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.35/logs diytomcat
后台启动9090端口映射容器内8080,启动后的容器名称卫xiesijietomcat-a 挂载webapps以及日志目录。
18、推送镜像至阿里云
19、搭建redis集群
1、创建自定义网络
docker network create redis --subnet 172.19.0.0/16
#通过脚本一次创建6个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
# 通过脚本一次启动6个redis容器
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
20、docker发布springboot jar包
将jar或war包和名为Dockerfile的dockerfile文件放置同一目录,dockerfile内容如下:
FROM java:8
COPY *.jar /app.jar
CMD ["--SERVER.PORT=8088"]EXPOSE 8088
ENTRYPOINT ["java" ,"-jar","/app.jar"]
执行docker build --t mybootweb . 命令即可创建镜像
执行 docker run -d -P --name mybootweb01 myboodweb 启动镜像
21、docker网络
通常我们直接启动容器会默认网络(--net bridge),这个网络就是docker0.如:
docker run -d -p 8080:8080 --name tomcat01 tomcat#实际启动如下,默认网络 docker0,域名无法访问
docker run -d -p 8080:8080 --name tomcat01 --net bridge tomcat
创建自定义网络:
创建网桥模式的网络,名为mynet。--subnet 指定网段和子网掩码 --gatewat指定网关路由
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
使用自定义网络启动容器:
docker run -d -P --name tomcat-net01 --net mynet
docker run -d -P --name tomcat-net02 --net mynet
如上两个tomcat01处在同一网段,既可以用ip地址相互ping通,也可通直接通过服务名相互ping。
例如:docker exec -it tomcat-net01 ping tomcat-net02 可以直接ping通
若两个容器不在同一网端,可使用connect命令,将一个容器连接到一个不同网段的网络
如:docker network connect mynet tomcat01
将tomcat01放到mynet网段中,即:一个容器两个ip。连接后处于不同网段的容器也可相互ping通。