企业网站建设运营的灵魂,安宁市建设局网站,用html做一个网页,做网站上传的程序在哪里下载目录 Linux下安装docker配置阿里云镜像加速docker命令部署安装Tomcat、ES容器数据卷DockerFiledocker网络制作tomcat镜像Redis集群部署SpringBoot微服务打包docker镜像拓展 什么是Docker
Docker是内核级别的虚拟化#xff0c;可以在一个物理机上可以运行很多的容器实例。服务… 目录 Linux下安装docker配置阿里云镜像加速docker命令部署安装Tomcat、ES容器数据卷DockerFiledocker网络制作tomcat镜像Redis集群部署SpringBoot微服务打包docker镜像拓展 什么是Docker
Docker是内核级别的虚拟化可以在一个物理机上可以运行很多的容器实例。服务器的性能可以被压榨到极致。Docker是基于Go语言开发的开源项目。
镜像image docker镜像就好比是一个模板可以通过这个模板来创建容器服务镜像run容器通过这个镜像可以创建多个容器最终服务运行或者项目运行就是在容器中的。
容器container Docker利用容器技术独立运行一个或者一个组应用通过镜像来创建的。启动停止删除。
仓库repository 仓库就是存放镜像的地方。
官网https://www.docker.com/ 文档地址https://docs.docker.com/ Doker镜像仓库地址https://hub.docker.com/
Linux下安装docker
1、需要的安装包
yum install -y yum-utils
2、设置镜像的仓库
yum config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、更新yum软件包索引。
yum makecache
4、安装
yum install docker-ce docker-ce-cli containerd.io
5、启动docker
systemctl start docker
6、使用docker version查看是否安装成功
docker run hello-world
配置阿里云镜像加速
登录阿里云找到容器服务。找到镜像加速地址配置使用。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -EOF
{
registry-mirrors: [https://xxx.xxx.xxx.com]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerdocker命令
docker --help 帮助
docker version 版本
docker info 详细信息
docker stats实时查看容器运行情况
docker history IMAGEID查看镜像构建记录
镜像命令
docker images [-a所有镜像,-q只要镜像ID]查看本机镜像
docker tag 镜像id 新镜像名:tag标签 克隆命名新的镜像
docker search xxx 搜素镜像
docker search mysql --filterSTARS3000[rootCentOS7 docker]# docker search mysql --filterSTARS3000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source… 14616 [OK] mariadb MariaDB Server is a high performing… 5573 [OK]
docker pull xx 下载镜像默认最新版分层下载节省开销加快速度
指定版本下载docker pull mysql:5.7
docker rmi [-f] 镜像名/镜像ID 删除镜像
删除所有镜像 文件 docker rmi -f $(docker images -aq)
生成镜像
docker commit 容器id xx镜像名根据容器的changes生成一个镜像-a作者名-m信息。
docker build [options] 生成路径path根据dockerfile生成镜像。
docker build [选项] 镜像名[:标签]或者上下文路径或者URL 所执行目录.表示在当前目录执行
例docker build -f mydockerfile -t mytomcat .
上传提交镜像
docker push [OPTIONS] NAME[:TAG]上传一个镜像到远程仓库。
Options: -a, --all-tags将所有版本的镜像提交。 –disable-content-trust 忽略镜像提示。 -q, --quiet 简洁生成。
上传到dockerhub
1在hub.docker.com创建账号
2登录账户docker login -u xxx -p
3上传镜像
docker push 镜像:tag
上传到阿里云
1登录到阿里云找到容器镜像服务
2创建命名空间
3创建容器镜像仓库
4查看仓库基本信息获取ip地址按照操作指南执行
5比如登录
sudo docker login --usename xxx registry.cn-beijing.aliyuncs.com
容器命令
有了镜像才能创建容器。
运行容器
docker run [options] 镜像 创建容器运行镜像
--name 命名容器Repository:Tag
--rm退出时删除容器
-d 以后台方式运行若容器不向客户端提供服务则停止运行
-it 交互方式运行启动进入容器查看内容
exit或ctrld退出停止运行ctrl p q退出不停止
-p 指定容器端口主机端口容器端口
例1交互式运行centos
docker run -it centos /bin/bash #会进入容器的交互终端
docker run -itd centos /bin/bash #以后台交互方式运行容器不会进入容器
后面的/bin/bash的作用是表示运行bash ,docker中必须要保持一个进程的运行这个/bin/bash就表示启动容器后启动bash。
例2以脚本方式运行centos镜像每隔1秒启动容器。
docker run -d centos /bin/bash -c while true;do echo xxx;sleep 1 ; done
例3以后台方式创建容器运行nginx镜像并向外开放3344端口
docker run -d --name nginx01 -p 3344:80 nginx
查看容器
docker ps [options]查看正在运行的容器
-a查看运行记录-n?显示最近运行的容器-q显示ID
docker container ls
删除容器
docker rm 容器id删除容器-f强制删除
例删除所有容器
docker rm -f $(docker ps -aq)
启动和停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill id强制停止运行
生成镜像
docker container commit 容器id xx镜像名-a作者名-m信息。
docker build [options] 生成路径path根据dockerfile生成镜像。
docker build [选项] 镜像名[:标签]或者上下文路径或者URL 所执行目录.表示在当前目录执行
-f指定dockerfile文件-t命名镜像
例1提交容器3fdf3rfe4生成镜像tomcat01
docker commit -axxx -mxxx 3fdf3rfe4 tomcat01:1.0
例2根据dockerfile生成镜像保存到当前目录
docker build -f /home/dockerfile -t myimage:1.0 .
其他命令
docker logs [options] 容器id查看日志
Options: –details显示详细信息 -f, --follow 实时输出日志 –since 显示在某个时间后的日志 -n, --tail 展示最后n行日志 -t, --timestamps ,显示时间 –until ,显示一个时间前的日志
docker top 容器id查看正在运行的容器中的进程
docker inspect 容器id查看容器的元数据(返回的JSON格式)
docker exec -it 容器id /bin/bash以新终端进入正在运行的容器
docker attach 容器id进入容器正在运行的终端
docker cp 容器id:文件绝对路径 主机目的路径从容器中拷贝文件到主机
docker pause 容器id 悬挂中断
docker unpause 容器id
部署安装Tomcat、ES
tomcat
1、下载镜像
docker pull tomcat:9.0
2、启动镜像
docker run -d --name tomcat01 -p 3355:8080 tomcat:9.0
3、进入tomcat容器中配置/usr/local/tomcat/webapps目录
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist webapps
4、访问测试
docker ps
curl localhost:3355
ES
docker run -d --name es01 -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node -e ES_JAVA_OPTS-Xms64m -Xmx512m elasticsearch:7.7.0
容器数据卷
让容器内的文件数据与linux主机或容器之间同步互通形成共享修改容器配置文件时可直接在主机服务器上修改不需要进入容器实现容器数据持久化。
方式一、-v卷挂载命令
例docker run -it -v 主机路径:容器内路径 centos /bin/bash
在主机上通过docker inspect 容器查看mount挂载情况。
例安装mysql同步数据
docker pull mysql:5.7
docker run -d -p 3304:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 --name mysql_01 mysql:5.7
参数说明-d后台运行-p端口映射-v卷映射-e环境配置。
容器启动成功后在本地连接3304端口连接数据库。
匿名挂载-v 容器内路径
docker run -d -p --name nginx01 -v /etc/nginx nginx
具名挂载-v 卷名:容器内路径
docker run -d -p --name nginx01 -v nginx_01:/etc/nginx nginx
默认卷挂载到本地的/var/lib/docker/volumes/
指定路径挂载-v 本地路径:容器路径
docker run -d -p --name nginx01 -v /home/nginx01/:/etc/nginx nginx
卷管理
docker volume [options]管理数据卷参数说明
create 创建一个卷 inspect查看卷详细信息 ls列出所有卷 prune删除未使用的本地卷 rm删除卷
方式二、dockerfile
1、创建一个dockerfile文件
vim dockerfile
2、编写dockerfile
FROM centos
VOLUME [volume01]
CMD echo ----end----
CMD /bin/bash
#解释
FROM 镜像名:标签 #FROM指定基础镜像其必须为Dcokerfile中第一条指令
RUN 命令 #在该镜像中执行命令如果执行多个命令用 连接起来3、docker build 生成镜像文件
docker build -f /home/dockerfile -t 镜像名(repo):版本标签(tag) .
方式三、容器之间–volumes-from
创建一个容器docker02与其他容器共享数据。
docker run -it --name docker02 --volumes-from docker01 nginx
删除容器docker01数据依旧存在因为它的数据在本地/var/lib/docker/volume下。
DockerFile
dockerfile用来构建镜像文件命令脚本。
dockerfile指令
FROM #基础镜像 MAINTAINER #维护者姓名邮箱 RUN #镜像构建时需要运行的命令 ADD #添加文件若是压缩包则自动解压 WORKDIR #镜像工作目录 VOLUME #挂载目录 EXPOSE #保留端口配置 CMD #指容器启动需要运行的命令只有最后一个生效追加命令会覆盖 ENTRYPOINT #指定容器运行时需要的命令可以docker run时追加命令 ONBUILD #当构建一个被继承的dockerfile时触发onbuild指令 COPY #将主机文件拷贝到制作的镜像中 ENV #构建时设置环境变量
例编写一个mycentos镜像文件生成镜像
vim mydockerfile-centos
FROM centos MAINTAINER zzzh163.com ENV MYWORKPATH /usr/local WORKDIR $MYWORKPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYWORKPATH CMD echo ---end--- CMD /bin/bash
docker build -f mydockerfile-centos -t mycentos:1.0 .
CMD与ENTRYPOINT比较
相同点
1、只能写一条如果写了多条那么只有最后一条生效
2、容器启动时才运行运行时机相同
不同点
ENTRYPOINT不会被运行的command覆盖而CMD则会被覆盖如果我们在Dockerfile种同时写了ENTRYPOINT和CMD并且CMD是一个完整的指令那么它们两个会互相覆盖谁在最后谁生效。
docker网络
docker网络是一种虚拟网络网络为成对的bridge桥接模式。主机可与创建的容器进行通信但是容器之间通信需要额外的操作。docker默认给容器分配一个虚拟内部ip地址网络为docker0。
例docker exec -it tomcat01 ping tomcat01
无法ping通因为容器在docker0网络无法通过容器名ping通。
ping不同的另一种原因
OCI runtime exec failed: exec failed: unable to start container process: exec: ping: executable file not found in $PATH: unknown
以上报错是因为docker创建的容器相当于一个miniLinux很多命令和软件没有安装包括network这一网络工具都没有。下载软件包只能通过apt-get或wget和curl命令。
docker network网络管理
docker network [options]options如下
connect连接容器到网络
create创建网络
inspect 查看网络
ls 列出所有网络
rm 删除网络
–link实现单向通信
运行tomcat02容器使其能够与tomcat01通信。原理是在容器的/etc/hosts文件中配置了主机名与ip地址映射。
docker run -d --name tomcat02 --link tomcar01 tomcat
自定义网络
自定义网络支持通过容器名通信创建一个自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 Mynet
–net指定网络
使用自定义网络创建容器在该网络中为容器分配ip
docker run -d --name tomcat02 --net Mynet tomcat
在该网络中的容器可以相互通信可ping tomcat02。
容器-网络连接
如何让一个容器连接到另一个网络或者与另一个网络中的容器通信可使用docker network connect原理是将容器添加到该网络中。
docker network connect [OPTIONS] NETWORK CONTAINER
Options: –alias 为网络添加作用范围scope –driver-opt 选择网络模式driver –ip 指定一个容器ip地址 –link list 添加到另一个容器的连接 –link-local-ip 为容器添加一个本地ip地址
docker network connect Mynet tomcat02将tomcat02挂到Mynet网络。
可使用docker network inspect 查看网络中有哪些容器。
实战
如何使用docker制作tomcat镜像并上传至阿里云部署redis和springboot项目。
制作tomcat镜像
通过dockerfile制作一个tomcat镜像并发布到阿里云镜像仓库。
1、在用户工作的主目录中创建一个build/tomcat文件夹
2、准备tomcat和jdk安装包上传到该文件夹下
3、在文件夹下创建一个README.txt文件并编写Dockerfile文件
touch README.txt
vim Dockerfile
FROM centos#本地基础镜像docker images查看是否有该镜像否则将失败
MAINTAINER zzhxxxxqq.com
COPY README.txt /usr/local/
ADD /root/build/tomcat/apache-tomcat-8.5.94.tar.gz /usr/local/
ADD /root/build/tomcat/jdk-8u151-linux-x64.tar.gz /usr/local/RUN yum -y install vim
RUN yum -y install net-toolsENV MYPATH /usr/local
WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.94
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.94
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-8.5.94/bin/startup.sh tail -F /usr/local/apache-tomcat-8.5.94/logs/catalina.out4、构建diytomcat镜像
docker build -t diytomcat .
5、创建容器运行
docker run -d -p 3355:8080 --name mytomcat01 -v /root/build/tomcat/test:/usr/local/apache-tomcat-8.5.94/webapps/test -v /root/build/tomcat/logs:/usr/local/apache-tomcat-8.5.94/logs diytomcat
6、测试运行
在linux主机测试curl localhost:3355或直接访问。
7、上传至阿里云镜像仓库
docker login --usernamexxx registry.cn-shanghai.aliyuncs.com
#重命名镜像
docker tag 镜像 registry.cn-shanghai.aliyuncs.com/命名空间/仓库名:tag
docker push registry.cn-shanghai.aliyuncs.com/命名空间/仓库名:tag
Redis集群部署
1、创建网络
docker network create redis --subnet 172.17.0.0/16
2、通过脚本创建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 node.conf
cluster-node-timeout 5000
cluster-announce-ip 172.17.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
donedocker run -p 637${port}:6379 -p 16371: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.17.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
3、查看redis容器进入容器
docker ps
docker exec -it redis-1 /bin/sh
3、创建redis集群
redis-cli --cluster create 172.17.0.11:6379 172.17.0.12:6379 172.17.0.13:6379 172.17.0.14:6379 172.17.0.15:6379 172.17.0.16:6379 --cluster-relicas 1
4、查看集群
redis-cli -c
cluster info
cluster nodes
SpringBoot微服务打包docker镜像
1、将springboot项目打包为xxx.jar
2、编写Dockerfile文件
FROM java:8
MAINTAINER zxxqq.comCOPY *.jar /app.jar
EXPOSE 8080ENTRYPOINT [java,-jar,/app.jar]3、构建镜像
docker build -t myApp .
4、发布镜像下载镜像运行
docker push myApp
docker pull myApp
docker run -d -p 8080:8080 --name X-WEB-APP myApp
5、测试
curl localhost:8080
拓展
compose、swarm、Jenkins