簡單記錄Docker的使用和GitLab的搭建
## Docker基礎篇 ### 沒有sudo權限 ### 安裝docker ### 基礎命令 ### docker安裝mysql和配置 ### Dockerfile常用命令 ### 制作鏡像 ### 發布鏡像 ### 容器網絡 ### Docker Compose ### Swarm模式 集群
## 正式搭建GitLab ### 系統環境 ### 安裝gitlab ### 配置gitlab.rb文件 ### cpu跑滿解決方案
Docker基礎篇
沒有sudo權限
- su -
- chmod u+w /etc/sudoers
- vi /etc/sudoers
- zrk ALL=(ALL) ALL
- chmod u-w /etc/sudoers
安裝docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-edge
sudo yum makecache fast
sudo yum install docker-ce
sudo service docker start
systemctl enable docker
基礎命令
-
查看版本:docker --version
-
拉取需要的鏡像:docker pull 名稱(如:redis)
-
查看本地所有鏡像:docker images
-
查詢所有的容器:docker ps -a
-
停止容器:docker stop 容器名稱
-
刪除順序,先刪除容器后刪除鏡像
- docker rm 容器ID
- docker rmi 鏡像ID
-
運行一個容器:docker run [參數] 鏡像名稱
- 端口映射:-p 本機端口:容器端口
- 分離模式(在后台運行):-d
- 名稱:--name
-
在運行的容器中執行命令:docker exec [參數] 容器名稱 命令
- 分離模式:-d
- 展示容器輸入信息STDIN:-i
- 命令行交互模式:-t
docker安裝mysql和配置
-
sudo mkdir data/mysql/logs data/mysql/conf data/mysql/data -p
-
sudo docker pull mysql/mysql-server:5.7
-
docker run -d -p 3306:3306 --name mysql01 mysql/mysql-server
-
docker exec -it 容器名稱 bash
-
帶參數安裝mysql
sudo docker run
--name mysql-server5.7
--restart always
-d -p 3306:3306
-v /home/zrk/data/mysql/data:/var/lib/mysql
-v /home/zrk/data/mysql/conf/my.cnf:/etc/mysql/my.cnf
-v /home/zrk/data/mysql/logs:/logs
-e MYSQL_ROOT_PASSWORD=root123456
-e MYSQL_USER=zrk
-e MYSQL_PASSWORD=zrk123456
mysql/mysql-server:5.7
--character-set-server=utf8
--collation-server=utf8_general_ci
- 修改my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
- mysql修改用戶權限
grant all privileges on *.* to 'zrk'@'%' identified by '密碼' with grant option;
flush privileges;
Dockerfile常用命令
-
FROM 基於另一個鏡像進行創建,或者重新創建
-
MAINTAINER 鏡像維護人
-
RUN 運行命令
-
COPY 復制
-
ENTRYPOINT 定義容器入口
-
CMD 設置容器運行的默認命令和參數
-
WORKDIR 容器運行的目錄
-
EXPOSE 暴露端口
-
ENV 設置環境變量
-
VOLUME 控制如何在宿主中進行存儲
制作鏡像
-
使用Vs Code的Docker插件
- Ctrl+Shift+P
- ADD Docker Files to Workspace
- ASP.Net Core(選擇應用平台)
- Linux(選擇Linux容器)
- 5000(程序監聽端口)
-
修改Dockerfile文件
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DockerDemo.dll"]
-
docker build -t 制作鏡像的名稱 .
-
docker run -d -p 8080:5000 --name 容器名稱 -v ${PWD}:/app 鏡像名稱
制作鏡像
-
docker login 登錄
-
docker push 用戶名/鏡像名稱
- 如果鏡像和用戶名不一致,需要修改鏡像名稱:docker tag 舊名稱 用戶名/鏡像名稱
-
訪問網址,可看到發布的鏡像:[https://hub.docker.com/]
容器網絡
-
Legacy Linking:使用容器名稱進行連接,創建橋連接網絡,容器間可以通信
- docker run -d -p 8080:5000 --link 容器名稱 鏡像名稱
-
把容器添加到橋連接網絡:可以創建自定義橋連接網絡,網絡內的容器才能互相通信
- 創建網絡:docker network create --drive bridge 網絡名稱
- 加入網絡:docker run -d --network=網絡名稱 --name 網絡內的容器名稱 鏡像名稱
- 查詢網絡:docker network ls
- 檢查網絡:docker network inspectr
- 連接網絡:docker network connect 網絡名稱 容器名稱
- 刪除網絡:docker network rm 網絡名稱
- 斷開連接:docker network disconnect 網絡名稱 容器名稱
Docker Compose
-
安裝
- sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
-
docker-compose build 把docker-compose.yml文件中的所有服務構建成鏡像
-
docker-compose up 啟動
-
docker-compose down 停止、刪除,由up命令建立的所有東西
-
docker-compose logs
-
docker-compose ps
-
docker-compose start
-
docker-compose stop
-
docker-compose rm
-
docker-compose.yml例子
version: '3'
services:
服務名稱:
build:
context: .
dockerfile: Dockerfile
ports:
- '8080:5000'
networks:
- 網絡名稱
depens_on:
- '服務名稱'
服務名稱:
image: 鏡像名稱
environment:
環境變量
networks:
網絡名稱:
driver: bridge
- docker-compose.yml實例
version: '3'
services:
mysqldb:
image: mysql/mysql-server
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
restart: always
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD= root123456
MYSQL_USER= zrk
MYSQL_PASSWORD= zrk123456
volumes:
- "/home/zrk/data/mysql/data:/var/lib/mysql"
- "/home/zrk/data/mysql/conf/my.cnf:/etc/my.cnf"
- "/home/zrk/data/mysql/logs:/logs"
- "/home/zrk/data/mysql/init:/docker-entrypoint-initdb.d/"
web:
build: .
container_name: 'aspnetcore'
ports:
- '8080:80'
depends_on:
- mysqldb
Swarm模式 集群
- 管理節點、工人節點、服務、任務
正式搭建GitLab
系統環境
- 1核2G 1M CentOS
安裝gitlab
-
docker pull gitlab/gitlab-ce
-
docker run -d --name gitlab --restart always -p 8443:443 -p 80:80 -p 8822:22 -v /home/zrk/data/gitlab/config:/etc/gitlab -v /home/zrk/data/gitlab/logs:/var/log/gitlab -v /home/zrk/data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
-
docker exec -it gitlab bash
配置gitlab.rb文件
- sudo vi /home/zrk/data/gitlab/config/gitlab.rb
# 配置http協議所使用的訪問地址,不加端口號默認為80
external_url 'http://127.0.0.1'
# 配置ssh協議所使用的訪問地址和端口
gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 8822 # 此端口是run時22端口映射的8822端口
- gitlab-ctl reconfigure
cpu跑滿解決方案
-
方案一:在gitlab.rb配置中取消unicorn的注釋:unicorn['worker_processes'] = 2
- 略有改善
-
方案二:創建swap分區(推薦方案)
- 創建4G用於分區的文件:sudo dd if=/dev/zero of=/home/swap bs=512 count=8388616
- 格式化為swap分區:sudo mkswap /home/swap
- 啟用swap分區:sudo swapon /home/swap
- 設置為開機自啟動:echo "/home/swap swap swap defaults 0 0" >>/etc/fstab
- 查看分區:cat /proc/swaps
-
清理緩存
- sync
- echo 1 > /proc/sys/vm/drop_caches