目录
一丶docker简介
二丶Docker私库简介(Dockerhub)
三丶Docker优势
四丶docker安装
4.1 使用官方安装脚本自动安装 (仅适用于公网环境)
4.2 手动安装
4.2.1 Ubuntu 14.04 16.04
4.2.2 CentOS 7
4.2 安装校验
4.3 镜像加速器
4.4 测试是否成功
五丶docker常用命令
六丶docker部署项目
6.1丶安装mysql
6.2丶安装tomcat
6.3丶部署项目
6.4丶访问运行结果
七丶安装dockerCompose
7.1 docker三剑客之一
7.2 示例docker-compose.yaml文件
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 包括三个基本概念:
镜像(Image)---->应用商店:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container)---->安装包:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository)---->应用程序:仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
传送门:Docker Hub
类似maven的私有仓库
官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。
Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。
官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。
这里以CentOS 7操作系统为例
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
(阿里云ECS可以通过内网安装,见注释部分内容)
(使用apt-get进行安装)
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书e
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
注意:其他注意事项在下面的注释中
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2、Step 3中的命令
# 经典网络:
# curl -fsSL http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# VPC网络:
# curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
(使用yum进行安装)
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
每个人的镜像加速器地址都不一样
参考网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
使用加速器可以提升获取Docker官方镜像的速度
加速地址: https://1sbmxpab.mirror.aliyuncs.com
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1sbmxpab.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1sbmxpab.mirror.aliyuncs.com"]
}
EOF
#配置完之后记得重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info
Registry Mirrors:
https://3rgzvcby.mirror.aliyuncs.com/
Live Restore Enabled: false
参考地址:docker 常用命令大全_保护我方胖虎的博客-CSDN博客_docker常用命令
docker
仓库 Repository--------------应用商店
镜像 image--------------安装包
容器 container------------应用程序
启动docker
systemctl start docker.service
查看docker状态
systemctl status docker.service
设置docker开机自启
systemctl enable docker.service
查看某个程序的端口/状态是否在运行
ps -ef | grep 应用程序名称: ps -ef | grep tomcat/redis/nginx
netstat -ntlp:查看系统中的端口以及程序运行清空 yum -y install net-tools
kill 结束进程 kill -9 强制结束进程
dockerhub:镜像仓库
https://hub.docker.com/
查找镜像
docker search mysql
拉取镜像
docker pull mysql:5.7
查看镜像
docker images
删除镜像
docker rmi 镜像ID
运行容器
docker run xxxxx //--name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7
--name 容器的名字 mysql5.7
--e 运行的环境 MYSQL_ROOT_PASSWORD=123456
--p 端口映射 3306:3306 宿主机端口:容器端口
--d 后台运行 daemonize
查看启动的容器
cid为运行容器的(CONTAINER ID )编号
docker ps (-a):-a未启动的也会被查询出来,没有-a只是查询启动的
docker rm $(docker ps -a -q) 删除所有已经停止的容器
docker stop cid(容器id)停止正在运行的容器
docker start cid 开启停止运行的容器
docker restart id 重启容器
docker rm cid(虽然创建一个容器很简单,但是不能随便删除容器,因为我们的数据都在容器中,正在运行的容器不能直接删除)
数据卷(volumns):将容器中的数据卷入到本地,简写为-v
docker rm -f cid 暴力删除
docker rm $(docker ps -qa) 删除所有的容器 rm -rf /*:删除根目录所有文件(重装系统gg)
docker run -itd --name myredis -p 6379:6379 redis:4.0.0 启动redis
docker run --name mytomcat -p 8080:8080 -d tomcat:7.0.62 启动tomcat
进入容器内部(为了修改配置):
docker exec -it cid /bin/bash
docker cp /home/SSMmaven.war 1b6559fa300c:/usr/local/tomcat/webapps
复制SSMmaven.war包到docker容器的webapps目录下
1.拉取镜像
docker pull mysql:5.7
2.启动镜像
运行容器
docker run xxxxx
示例
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7
--name 容器的名字 mysql5.7
--e 运行的环境 MYSQL_ROOT_PASSWORD=123456
--p 端口映射 3306:3306 宿主机端口:容器端口
--d 后台运行 daemonize
3.测试连接
1.拉取镜像
docker pull tomcat:8.5.55
2.启动镜像
docker run --name mytomcat -p 8080:8080 -d tomcat:7.0.62
1.找一个可以运行的SSM项目打成war包
2. 把war包传输到home文件夹下
3.把war包复制到docker运行的tomcat镜像的webapps文件夹下
docker cp 文件所在目录 运行容器的id:/usr/local/tomcat/webapps
示例:
docker cp /home/SSMmaven.war 1b6559fa300c:/usr/local/tomcat/webapps
复制SSMmaven.war包到docker容器的webapps目录下
4.重启tomcat
docker restart id 重启容器
[root@iZwz9dfezxci90bavleqkxZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e658f584a5c tomcat:8.5.55 "catalina.sh run" 4 hours ago Up 4 hours 0.0.0.0:8080->8080/tcp mytomcat
f3eeeb87c7f6 redis:4.0.0 "docker-entrypoint.s…" 21 hours ago Up 21 hours 0.0.0.0:6379->6379/tcp myredis
dfaa1d5d9374 mysql:5.7 "docker-entrypoint.s…" 22 hours ago Up 22 hours 33060/tcp, 0.0.0.0:3307->3306/tcp mysql57
docker restart 6e658f584a5c
# 下载1.25.0 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试安装
sudo docker-compose --version
#启动一个容器
#docker-compose命令需要在docker-compose.yaml文件同一目录下执行
docker-compose up -d
#停止容器
docker-compose down
version: "3"
networks:
traefik:
external: true
services:
mysql:
container_name: mysql
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- /app/cloud/mysql/data:/var/lib/mysql
ports:
- "3307:3306"
restart: always
nacos:
image: nacos/nacos-server:1.4.1
container_name: nacos
hostname: nacos
restart: always
environment:
- MODE=standalone
- TZ=Asia/Shanghai
- NACOS_SERVER_PORT=8848
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=47.107.249.34
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_DB_NAME=nacos_config
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
- PREFER_HOST_MODE=hostname
volumes:
- /app/cloud/nacos/logs:/home/nacos/logs
ports:
- "8848:8848"
sentinel:
image: bladex/sentinel-dashboard:1.8.0
container_name: sentinel
ports:
- "8858:8858"
restart: always
rabbitmq:
hostname: rabbitmq
environment:
RABBITMQ_DEFAULT_VHOST: "root"
RABBITMQ_DEFAULT_USER: "root"
RABBITMQ_DEFAULT_PASS: "123456"
image: "rabbitmq:3.9.14-management"
restart: always
volumes:
- "/usr/local/bank/rabbitmq/data:/var/lib/rabbitmq"
- "/usr/local/bank/rabbitmq/log:/var/lib/rabbitmq/log"
ports:
- "15672:15672"
- "4369:4369"
- "5672:5672"
- "25672:25672"
mqnamesrv:
image: foxiswho/rocketmq:4.7.0
container_name: mqnamesrv
ports:
- 9876:9876
environment:
JAVA_OPT: -server -Xms256m -Xmx256m
command: sh mqnamesrv
mqbroker:
image: foxiswho/rocketmq:4.7.0
container_name: mqbroker
ports:
- 10911:10911
- 10909:10909
volumes:
- ./conf/broker.conf:/usr/local/docker/conf/broker.conf
environment:
JAVA_OPT_EXT: -server -Xms256m -Xmx256m -Xmn128m
NAMESRV_ADDR: mqnamesrv:9876
command: sh mqbroker -n mqnamesrv:9876 -c /usr/local/docker/conf/broker.conf
mqconsole:
image: styletang/rocketmq-console-ng
container_name: mqconsole
ports:
- 19876:8080
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falses
portainer:
container_name: portainer
image: portainer/portainer:latest
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
- ./ortainer_data:/data:rw
- ./public:/public:rw
networks:
- traefik
ports:
- "9000:9000"
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.portainer_halobug.entrypoints=https"
- "traefik.http.routers.portainer_halobug.rule=Host(`47.107.249.34`)"
- "traefik.http.routers.portainer_halobug.tls=true"
- "traefik.http.services.portainer_halobug-backend.loadbalancer.server.scheme=http"
- "traefik.http.services.portainer_halobug-backend.loadbalancer.server.port=9000"
logging:
driver: "json-file"
options:
max-size: "10m"
MySQL 8.x
version: '3.1'
services:
mysql8:
image: mysql:8.0.13
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
adminer
version: '3.1'
services:
adminer:
image: adminer
restart: always
ports:
- 8080:8080
gitlab
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh'
restart: always
hostname: '119.45.140.73'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://119.45.140.73:8080'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
Jenkins
version: '3.1'
services:
jenkins:
restart: always
image: jenkinsci/jenkins
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
environment:
TZ: Asia/Shanghai
volumes:
- data:/var/jenkins_home
volumes:
data:
tomcat
version: '3.1'
services:
tomcat:
image: tomcat:latest
restart: always
ports:
- 8080:8080