Docker 简介及使用

Docker 简介及使用

技术杂谈小彩虹2021-06-11 11:55:42110A+A-

Docker 简介

docker run --name nginx-test -p 8080:80 -d nginx
docker run --rm -d -p 40001:3000 jayfong/yapi:play
# 默认的管理员账号:admin@docker.yapi,管理员密码:adm1n

什么是 Docker

  • Docker 是一个集打包、运行、测试、发布于一体的开放式平台
  • 我们可以把开发过程中的基础设施分离出来部署到 Docker
    • DevOps:开发、构建、自动化部署、测试、文档
    • GitLib、Jenkins
    • Nginx、Apache
    • MySQL、MongoDb
    • 文档管理工具
  • 使用 Docker 可以避免复杂的应用环境配置,并以秒级的速度开启
  • 支持绝大多数平台,容器的性能开销极低

Docker 应用场景

  • Web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用

Docker 核心概念

  • Docker Daemon 守护进程
    • Docker Daemon 是 Docker 的守护进程
    • Docker Client 通过命令行与 Docker Daemon 通信完成 Docker 相关操作
  • Docker Client 客户端
    • 通过终端和用户交互
    • 终端中输入指令,Docker 客户端把指令传递给 Docker Daemon
  • Docker Image 镜像
    • 可以认为是一个最小版本的 Linux 系统的镜像,包含了所需的文件系统和一些配置好的应用
    • 需要通过容器来加载镜像
    • 是静态的,可以和面向对象中类对比
  • Docker Container 容器
    • 通过镜像创建一个容器
    • 可以创建多个容器,每一个容器都会开启一个进程,多个容器之间是相互隔离的
    • 是动态的,可以和面向对象的实例对比

Docker 体系结构

  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器

Docker 和虚拟机的区别

  • 虚拟机是硬件级虚拟化,每一个虚拟机内部都要分割系统资源,需要虚拟出虚拟硬件
  • Docker 是系统级虚拟化,容器共享系统资源,不会虚拟出硬件

安装 Docker

参考文档

systemctl start docker
systemctl stop docker
# 开机启动
systemctl enable docker
# 立即运行并开机启动
systemctl enable --now docker
  • 跑一个 Hello world
docker run hello-world

# 1. Docker client 连接 Docker daemon
# 2. Docker daemon 从 Docker Hub 拉取'hello world'的镜像
# 3. Docker daemon 基于拉取的镜像创建一个容器
# 4. Docker daemon 将容器中的应用执行的结果发送给 Docker client,并打印到终端

镜像加速

Docker 获取镜像的时候,默认从 Docker hub 获取,服务器在国外所以国内下载会很慢,我们可以设置成国内的镜像地址,类似于 npm

docker run hello-world --registry-mirror=https://docker.mirrors.ustc.edu.cn

docker run hello-world --registry-mirror=https://almtd3fa.mirror.aliyuncs.com
  • 配置中设置镜像地址
    • 在 /etc/docker/daemon.json 文件中设置以下内容
{"registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com", "https://registry.docker-cn.com"]}
  • 重启服务
systemctl daemon-reload
systemctl restart docker

Docker 基本使用

Docker 镜像使用

# 查看本地镜像
docker images

# 启动、停止和重启指定的容器
docker start/stop/restart 容器id

# 查看正在执行的容器
docker ps

# 查看所有容器
docker ps -a

# 获取一个镜像
# 如果指定镜像版本 centos:latest, 默认就是最新版本
docker pull centos

# 删除镜像
docker rmi hello-world

# 删除容器
docker rm 容器名

# 为镜像设置一个新的 tag
# image id -> 860c279d2fec
# 镜像的用户名 -> lfz
# 镜像名称 -> centos
# tag -> dev
docker tag 860c279d2fec lfz/centos:dev

容器使用

  • 使用镜像创建一个容器
# 以 centos 镜像启动一个容器
# 参数说明: -i 交互式操作,-t 终端,centos 镜像名称,/bin/bash 镜像运行以后执行的命令 打开终端 
docker run -it centos /bin/bash

# 不同镜像的用户是不一样的,启动镜像的参数也不同
# 参数说明:-d 后台运行,--name nginx-server 容器的名字
# 说明:-p 映射容器中的端口,宿主机端口:容器端口,nginx 镜像名称
docker run -d --name nginx-server -p 8080:80 nginx
  • 常用命令
# 查看所有容器
# 不加参数 -a 查看所有运行中的容器
docker ps -a

# 查看运行中容器的状态
docker stats 

# 启动容器,参数可以是容器id,或者容器名称
docker start nginx-server

# 停止、重启、删除容器
docker stop nginx-serve
docker restart nginx-serve
docker rm -f nginx-serve

# 清理所有终止的容器
docker container prune

# 进入容器
docker exec -it nginx-server /bin/bash

# 查看容器内部的日志
docker logs -f nginx-server
  • 导入和导出容器
# 导出容器,导出容器的快照文件
docker export nginx-server > nginx-server.tar

# 导入容器快照 - 从快照文件中导入镜像 mynginx 镜像名称,v1 镜像的 tag
cat docker/nginx-server.tar | docker import - mynginx:v1

安装 yapi

hub.docker.com/r/jayfong/y…

docker run --rm -d -p 40001:3000 jayfong/yapi:play
# 默认的管理员账号:admin@docker.yapi,管理员密码:adm1n。

安装 nginx 镜像

www.runoob.com/docker/dock…

常用 Docker 命令

  • 镜像操作
# 使用镜像开启一个容器,并进入容器 -it 交互式终端操作
docker run -it nginx /bin/bash 
# 使用镜像开启一个容器, 后台运行 
# 参数说明:--name nginx-test 容器名字 -p 端口映射 -d nginx 后台运行镜像名字
docker run --name nginx-test -p 8080:80 -d nginx
# 镜像删除
docker rmi nginx:test
  • 容器操作
# 在容器中执行命令
docker exec -it nginx-test /bin/bash 
# 启动停止
docker start bb0d52be2f81
docker stop bb0d52be2f81
# 删除
docker rm bb0d52be2f81

# 清理所有终止的容器
docker container prune

容器部署 Vue.js 项目

Dockerfile

  • Dockerfile
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install --registry=https://registry.npm.taobao.org 
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  • 使用 Dockerfile
docker build --rm -t deploy-web:v1.0 .
# 编译过程中如果遇到 npm install 的时候无法解析 npm 的地址,可以使用宿主机的 network
docker network ls
docker build --network host --rm -t deploy-web:v1.0 .
# 开启容器
docker run -itd --name web -p 88:80 deploy-web:v1.0
  • 在浏览器中测试

Docker Hub

  • 私有仓库 Harbor
  • 公共仓库 hub.docker.com/
    • 首先登陆到 Docker Hub
docker login
# 从容器创建一个新的镜像
docker commit a6a685eb4ba1 goddlts/web:v1.1
# 镜像上传到 hub
docker push goddlts/web

映射配置目录和网站根目录

  • 映射配置目录和网站根目录
# 复制之前容器中的 nginx 配置文件,把容器中的配置目录nginx拷贝到当前目录下
docker cp web:/etc/nginx .
docker run -itd \
  --name web-web \
  --volume /home/mypro:/usr/share/nginx/html \
  --volume /home/nginx:/etc/nginx \
  -p 89:80 \
  deploy-web:v1.0
# 更改权限
chmod -R 777 .

Gitlab

安装

docker run --detach \
	--hostname 192.168.137.129 \
  --publish 13880:80 --publish 13822:22 \
  --name gitlab \
  --restart always \
  -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

docker run --detach \
  --hostname lfz.com \
  --publish 13880:80 --publish 13822:22 \
  --name gitlab \
  --restart always \
  -v /backup/gitlab/config:/etc/gitlab -v /backup/gitlab/logs:/var/log/gitlab -v /backup/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

# 防火墙允许端口
firewall-cmd --add-port=13880/tcp --permanent
firewall-cmd --reload

docker logs -f gitlab
  • 通过浏览器访问,修改中文界面

  • 修改 gitlab 显示的端口

vi /home/gitlab/config/gitlab.rb
external_url 'http://192.168.137.129:13880'
nginx['listen_port'] = 80
gitlab_rails['gitlab_shell_ssh_port'] = 13822
docker restart gitlab

关闭防火墙(解决容器内无法解析DNS)

  • 关闭容器防火墙
  • 重启 docker
# 关闭防火墙
systemctl stop firewalld
# 开机禁用
systemctl disable firewalld
# 开机启用
systemctl enable firewalld
# 重启 docker
systemctl restart docker

Jenkins

# 下载镜像
docker pull jenkins/jenkins
# 创建容器 1
docker run -itd --name jenkins --net host --restart always -p 8080:8080 -p 50000:50000 jenkins/jenkins


docker run -itd --name jenkins --restart always -p 8080:8080 -p 50000:50000 jenkins/jenkins

# 查看 jenkins 默认管理员的密码
docker logs -f jenkins

# 36f11bfeab664931b463a2047fb3e395

# 开启端口 8080
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
# 关闭防火墙
systemctl stop firewalld
  • 重新创建 Jenkins
# 拷贝 Jenkins 的数据到 宿主机
docker cp jenkins:/var/jenkins_home /home/

# 创建容器 2
docker run -itd \
	--name jenkins \
  --user jenkins \
  --net host \
  --restart always \
  -p 8080:8080 -p 50000:50000 \
  -v /home/jenkins_home:/var/jenkins_home \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins
  
  

# 宿主机
cd /home/jenkins_home
chmod -R 777 .
chmod -R 777 /usr/bin/docker
chmod -R 777 /var/run/docker.sock

Jenkins 插件

持续集成配置

Jenkins

  • Jenkins 中配置 Gitlab 的权限
    • 系统管理 -> 全局安全配置

  • Gitlab 中创建应用之后填写

  • 设置好之后,先应用再保存!!!!!!血的教训

Gitlab

  • 允许外发请求

    • 管理面板 -> Settings -> Network -> Outbound requests ->
      • Allow requests to the local network from web hooks and services
  • Gitlab 新建仓库,把本地仓库推送过来

  • Jenkins 中新建任务

    • 配置 git 地址,和凭证
    • 构建触发器,当 push 当 gitlab 执行脚本
# 判断是否存在 myprocon 容器
docker ps | grep myprocon &> /dev/null
if [ $? -eq 0 ]
then
	docker rm -f myprocon
fi

docker build -t mypro:v1.0 .
docker run -itd --name myprocon -p 89:80 mypro:v1.0
  • Gitlab 的想要应用这个任务的仓库中
    • 仓库的 Settings -> Webhooks
      • 配置 Jenkins 中的 webhook URL
      • 配置 Jenkins 中的 token
      • 去掉 SSL 验证
      • 点击添加 add webhook
      • 最下面添加的 webhook 中可以点击 Test 触发 push

Docker compose

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.example.com'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '80:80'
    - '443:443'
    - '22:22'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'
  • github:github.com/sameersbn/d…

  • docker-compose 方便快速运行多个容器

  • 使用一个命令,从 YML 配置文件创建并启动所有容器

安装

# 下载最新的稳定版本
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 授予 docker-compose 可执行
chmod +x /usr/local/bin/docker-compose

# 测试安装是否成功
docker-compose --version
# 开启容器
docker-compose up -d

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们