Docker安装与应用(个人记录备忘)

1、Docker官网www.docker.com

2、找到安装指引,先卸载旧版本Docker

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数据查看工具,参考地址

docker安装elasticsearch与head教程完整版—.NET Core Web Api与elasticsearch打造全站全文搜索引擎_elasticsearch head docker-CSDN博客

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   #安装网络命令 如ifconfig

EXPOSE 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 $MYPATH

ENV 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/bin

EXPOSE 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通。

  • 35
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值