admin管理员组

文章数量:1597498

Docker

Docker官方网址: https://docs.docker/ 英文地址
Docker中文网址: http://www.docker/ 中文地址
Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotClouw公司。Docker 自开源后受到广泛的关注和讨论,目前已有多个相关项目,逐断形成了围Docker的生态体系。dotCloud 公司后来也改名为Docker Ine。

Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

Docker优点

简化程序

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

Docker安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到

Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker

1、通过 uname -r 命令查看你当前的内核版本

uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum -y update

3、卸载旧版本(如果安装过旧版本的话)

yum remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

yum-config-manager --add-repo https://download.docker/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

7、安装docker (由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1)

sudo yum install -y docker-ce

8、启动并加入开机启动

systemctl start docker
systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

镜像相关命令

  1. 搜索镜像 # docker search java
    可使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放所有docker镜像软件的地方,类似maven的中央仓库)中的镜像。执行该命令后, Docker就会在Docker Hub中搜索含有 java这个关键词的镜像仓库。

    Docker Hub 官网https://hub.docker/search?q=java&type=image

  2. 下载镜像docker pull java:8
    使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最新版本的 Java镜像。如果要下载指定版本则在java后面加冒号指定版本

  3. 列出镜像使用 docker images命令即可列出已下载的镜像

  4. 删除镜像 使用 docker rmi java 命令即可删除指定镜像
    docker rmi d23bdf5b1b1b

阿里镜像加速

详细参考: https://cr.console.aliyun/cn-hangzhou/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ljcuzwzw.mirror.aliyuncs"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

容器相关命令

启动容器 docker run -d -p 81:80 nginx

在本例中,为 docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
访问 http://Docker宿主机 IP:81/,将会看到nginx的主界面如下:

需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。

列出容器用 docker ps命令即可列出运行中的容器

查看容器的信息 docker inspect 3af5513d208e

构建自己的docker镜像

1、将jar包上传linux服务器/usr/local/dockerapp目录,在jar包所在目录创建名为Dockerfile的文件

2、在Dockerfile中添加以下内容

###指定java8环境镜像
FROM java:8
###复制文件到容器app-springboot
ADD docker-springboot-0.0.1.jar /app-springboot.jar
###声明启动端口号
EXPOSE 8080
###配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app-springboot.jar"]

使用docker build命令构建镜像
docker build -t docker-springboot-0.0.1 .
格式: docker build -t 镜像名称:标签 '.'Dockerfile的相对位置

docker run -p 8080:8080 docker-springboot-0.0.1

重启systemctl restart docker

关闭防火墙 systemctl stop firewalld

Docker卸载应用程序

先删除容器,在删除镜像

查询容器 
docker ps –a
使用容器id删除容器
docker rm 18e672ecd8ed
查询镜像
docker images
使用镜像id删除镜像
docker rmi d23bdf5b1b1b

容器管理
进入到容(默认情况下软件安装的目录的/ect目录下Exit )

docker container exec -it f0b1c8ab3633 /bin/bash

停止Docker容器

docker stop  mynginx

MySQL安装

  • 查询mysql版本

     docker search mysql
    
  • 下载MySQL5.7版本(这里选择的是第一个mysql镜像, :5.7选择的5.7版本)

     docker pull mysql:5.7
    
  • 等待下载完成、创建MySQL容器

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

    参数说明: -p 3306:3306:将容器的3306端口映射到主机的3306端口 -v
    /data/mysql/conf:/etc/mysql:将配置文件夹挂在到主机 -v
    /data/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v
    /data/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机 -e
    MYSQL_ROOT_PASSWORD=root:初始化root用户的密码

  • 进入运行MySQL的docker容器:

     docker exec -it mysql /bin/bash
    
  • 使用MySQL命令打开客户端:

     mysql -uroot -proot --default-character-set=utf8
    

Redis安装

  • 下载Redis5.0的docker镜像:

     docker pull redis:5
    
  • 使用如下命令启动Redis服务:

     docker run -p 6379:6379 --name redis \
     -v /data/redis/data:/data \
     -d redis:5 redis-server --appendonly yes
    
  • 进入Redis容器使用redis-cli命令进行连接:

     docker exec -it redis redis-cli
    

Nginx安装

  • 下载Nginx1.10的docker镜像:

     docker pull nginx:1.10
    
  • 先运行一次容器(为了拷贝配置文件):

     docker run -p 80:80 --name nginx \
     -v /data/nginx/html:/usr/share/nginx/html \
     -v /data/nginx/logs:/var/log/nginx  \
     -d nginx:1.10
    
  • 将容器内的配置文件拷贝到指定目录:

     docker container cp nginx:/etc/nginx /data/nginx/
    
  • 修改文件名称

     mv nginx conf
    
  • 终止并删除容器:

     docker stop nginx
     docker rm nginx
    
  • 使用如下命令启动Nginx服务:

     docker run -p 80:80 --name nginx \
     -v /data/nginx/html:/usr/share/nginx/html \
     -v /data/nginx/logs:/var/log/nginx  \
     -v /data/nginx/conf:/etc/nginx \
     -d nginx:1.10
    

RabbitMQ安装

  • 下载rabbitmq3.7.15的docker镜像:

     docker pull rabbitmq:3.7.15
    
  • 使用如下命令启动RabbitMQ服务:

     docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
     -d rabbitmq:3.7.15
    
  • 进入容器并开启管理功能:

     docker exec -it rabbitmq /bin/bash
     rabbitmq-plugins enable rabbitmq_management
    
  • 开启防火墙:

     firewall-cmd --zone=public --add-port=15672/tcp --permanent
     firewall-cmd --reload
    

Elasticsearch安装

  • 下载Elasticsearch7.6.2的docker镜像:

     docker pull elasticsearch:7.6.2
    
  • 修改虚拟内存区域大小,否则会因为过小而无法启动:

     sysctl -w vm.max_map_count=262144
    
  • 使用如下命令启动Elasticsearch服务:

     docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
     -e "discovery.type=single-node" \
     -e "cluster.name=elasticsearch" \
     -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
     -v /data/elasticsearch/data:/usr/share/elasticsearch/data \
     -d elasticsearch:7.6.2
    
  • 启动时会发现/usr/share/elasticsearch/data目录没有访问权限,只需要修改/mydata/elasticsearch/data目录的权限,再重新启动即可:

     chmod 777 /mydata/elasticsearch/data/
    
  • 安装中文分词器IKAnalyzer,并重新启动:

     docker exec -it elasticsearch /bin/bash
     #此命令需要在容器中运行
     elasticsearch-plugin install https://github/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
     docker restart elasticsearch
    
  • 开启防火墙:

     firewall-cmd --zone=public --add-port=9200/tcp --permanent
     firewall-cmd --reload
    

    访问会返回版本信息:http://127.0.0.1:9200

Logstash安装

  • 下载Logstash7.6.2的docker镜像:

     docker pull logstash:7.6.2
    
  • 修改Logstash的配置文件logstash.conf中output节点下的Elasticsearch连接地址为es:9200,配置文件地址:https://github/macrozheng/mall/blob/master/document/elk/logstash.conf

     output {
       elasticsearch {
         hosts => "es:9200"
         index => "mall-%{type}-%{+YYYY.MM.dd}"
       }
     }
    
  • 创建/data/logstash目录,并将Logstash的配置文件logstash.conf拷贝到该目录:

     mkdir /mydata/logstash
    
  • 使用如下命令启动Logstash服务;

     docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
     --link elasticsearch:es \
     -v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
     -d logstash:7.6.2
    
  • 进入容器内部,安装json_lines插件。

     logstash-plugin install logstash-codec-json_lines
    

Kibana安装

  • 下载Kibana7.6.2的docker镜像:

     docker pull kibana:7.6.2
    
  • 使用如下命令启动Kibana服务:

     docker run --name kibana -p 5601:5601 \
     --link elasticsearch:es \
     -e "elasticsearch.hosts=http://es:9200" \
     -d kibana:7.6.2
    
  • 开启防火墙:

     firewall-cmd --zone=public --add-port=5601/tcp --permanent
     firewall-cmd --reload
    

    访问地址进行测试:http://127.0.0.1:5601

MongoDB安装

  • 下载MongoDB4.2.5的docker镜像:

     docker pull mongo:4.2.5
    
  • 使用docker命令启动:

     docker run -p 27017:27017 --name mongo \
     -v /data/mongo/db:/data/db \
     -d mongo:4.2.5
    

Docker常用命令

docker images 查看镜像文件
docker ps 查看正在运行的容器
docker ps –a 查看所有的容器
docker container exec -it f0b1c8ab3633 /bin/bash 进入到容器
exit 退出
docker version 查看版本
docker run -d -p 81:80 nginx 启动nginx容器
docker rmi imgageid 删除镜像
docker rm 容器id 删除容器

通过Docker安装的Nginx如何配置nginx.conf
Docker通过容器运行Nginx-----安装的目录 在容器中
/容器id/etc/nginx
/容器id/etc/mysql
默认情况下安装在 容器的etc目录

Docker 安装的软件如何修改配置文件的?
容器挂载外部配置文件 –v

使用挂载方式,外部的配置文件覆盖内部容器配置文件

安装jenkins:
docker run -p 8088:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

执行shell

#!/bin/bash
#服务名称
SERVER_NAME=gw_appcenter
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行  
JAR_NAME=appcenter-all-0.1.0-exec
# 源jar路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/gw_appcenter/appcenter-all/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/var/jenkins_home/workspace/appcenter

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
	kill -9 $id  
	echo "killed $id"  
done
echo "结束进程完成"

#复制jar包到执行目录
echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
echo cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "复制jar包完成"
echo cd $JAR_WORK_PATH
#修改文件权限
echo chmod 777 $JAR_NAME.jar

echo BUILD_ID=dontKillMe nohup java -jar  $JAR_NAME.jar  &

容器映射8081端口
1.重启容器
systemctl restart docker
2.清空未运行的容器
docker rm $(sudo docker ps -a -q)
docker run -p 8080:8080 -p 8087:8087 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

本文标签: 常用软件教程Docker