2022/6/15 docker安装与项目部署(入门教程)

目录

一丶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简介

        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私库简介(Dockerhub)

传送门: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,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

        1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。

        2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

        3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。

四丶docker安装

        这里以CentOS 7操作系统为例

        4.1 使用官方安装脚本自动安装 (仅适用于公网环境)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

        4.2 手动安装

(阿里云ECS可以通过内网安装,见注释部分内容)

                4.2.1 Ubuntu 14.04 16.04

(使用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"

                4.2.2 CentOS 7

(使用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

        4.2 安装校验

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

        4.3 镜像加速器

每个人的镜像加速器地址都不一样

参考网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

使用加速器可以提升获取Docker官方镜像的速度

加速地址: https://1sbmxpab.mirror.aliyuncs.com

  • Ubuntu

针对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
  • CentOS

针对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

        4.4 测试是否成功

docker info
 Registry Mirrors:
  https://3rgzvcby.mirror.aliyuncs.com/
 Live Restore Enabled: false

五丶docker常用命令

        参考地址: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目录下

六丶docker部署项目

        6.1丶安装mysql

                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.测试连接

        6.2丶安装tomcat

                 1.拉取镜像

docker pull tomcat:8.5.55

                 2.启动镜像

docker run --name mytomcat -p 8080:8080 -d tomcat:7.0.62

        6.3丶部署项目

                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

        6.4丶访问运行结果

七丶安装dockerCompose

        7.1 docker三剑客之一

# 下载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

        7.2 示例docker-compose.yaml文件

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

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abcdzzr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值