Docker 简介
- docs.docker.com/
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 是系统级虚拟化,容器共享系统资源,不会虚拟出硬件
-
官网的说明
- www.docker.com/resources/w…
-
容器技术和虚拟机区别
安装 Docker
参考文档
-
docs.docker.com/install/
-
www.runoob.com/docker/cent…
-
启动和停止 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
- 参考文档
- www.runoob.com/docker/dock…
- 常用的国内镜像地址
- docker.mirrors.ustc.edu.cn
- almtd3fa.mirror.aliyuncs.com
- registry.docker-cn.com
- 获取镜像的时候,指定地址
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 镜像使用
- www.runoob.com/docker/dock…
- 通过 Docker Hub 网站查找镜像
- hub.docker.com/
- 常用命令
# 查看本地镜像
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 项目
- cn.vuejs.org/v2/cookbook…
Dockerfile
- docs.docker.com/engine/refe…
- 创建 Docker 镜像
- Docker 镜像的配置文件
- 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
安装
- about.gitlab.com/install/
- docs.gitlab.com/omnibus/doc…
- [https://hub.docker.com/r/gitlab/gitlab-ce
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
-
通过浏览器访问,修改中文界面
- http://192.168.137.129:13880/
- 点击右上角头像 - Settings - Preferences - Localization - Language - Save Changes - 刷新浏览器
-
修改 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
- www.jenkins.io/zh/doc/
# 下载镜像
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 插件
- plugins.jenkins.io/
- Jenkins 插件加速
- mirrors.tuna.tsinghua.edu.cn/
- Jenkins 配置加速地址
- Manage Jenkins --> Manage Plugins --> Advanced --> Update Site
- mirrors.tuna.tsinghua.edu.cn/jenkins/upd…
- 安装常用插件
- Localization: Chinese (Simplified)
- Git client
- GitLab
- Gitlab Authentication
- Publish Over SSH
- GitHub
- Build Timeout
- 权限管理插件
- PAM Authentication
- Role-based Authorization Strategy
- LDAP
持续集成配置
Jenkins
- Jenkins 中配置 Gitlab 的权限
- 系统管理 -> 全局安全配置
- Gitlab 中创建应用之后填写
- 设置好之后,先应用再保存!!!!!!血的教训
Gitlab
- 配置 Jenkins 回调地址
- 查看回调地址如何写:plugins.jenkins.io/gitlab-oaut…
- 管理面板 -> Applications -> New Application
- http://192.168.137.128:8080/securityRealm/finishLogin
-
允许外发请求
- 管理面板 -> Settings -> Network -> Outbound requests ->
- Allow requests to the local network from web hooks and services
- 管理面板 -> Settings -> Network -> Outbound requests ->
-
Gitlab 新建仓库,把本地仓库推送过来
-
Jenkins 中新建任务
- 配置 git 地址,和凭证
- 构建触发器,当 push 当 gitlab 执行脚本
- GitLab webhook URL: http://192.168.137.128:8080/project/mypro
- 高级中生成 Secret token
- 8ecbbcb6dad150467cc48906940052f4
- 构建中设置要执行的脚本
# 判断是否存在 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
- 仓库的 Settings -> Webhooks
Docker compose
- 官方:docs.gitlab.com/omnibus/doc…
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 配置文件创建并启动所有容器
安装
- 获取 Docker compose 的最新版本,文档中会有安装说明
- github.com/docker/comp…
# 下载最新的稳定版本
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
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!