# view all images
docker ps
1. Start Nginx
docker run nginx
// run in backend
docker run -d -p nginx
// bridge port to run
docker run -d -p 8080:80 nginx
1.1 How to check docker inside nginx
進入docker內部
docker exec -it myerp_worker sh
或者
docker exec -it myerp_worker bash
Check included configs (virtual hosts)
cat /etc/nginx/conf.d/default.conf
或者
ls /etc/nginx/conf.d/
1.2 支持大文件上傳
如果nginx 在 docker的外部
COPY nginx.conf /etc/nginx/conf.d/default.conf
在http目錄下 或者 server目錄下
client_max_body_size 100M;
2. MySQL
// install mysql
docker pull mysql
docker pull mysql:8.0
// create root database
docker run -d
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=abc
-e MYSQL_DATABASE=123
mysql:latest
//access mysql
docker exec -u root -it <container_name_or_id> /bin/bash
docker exec -it mysql_db mysql -u root -p
docker stop mysql_db
docker rm mysql_db
docker pull mysql:8.0
docker run -d \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=user1 \
-e MYSQL_PASSWORD=pass123 \
--name mysql_db \
-p 3306:3306 \
-v /opt/workspa/rp:/var/lib/mysql \
mysql:8.0
2.1 創建一個管理員賬號
CREATE USER 'openerp_user'@'%' IDENTIFIED BY 'StrongPass@123';
GRANT ALL PRIVILEGES ON openerp_vb.* TO 'openerp_user'@'%';
FLUSH PRIVILEGES;
查看
SHOW GRANTS FOR 'openerp_user'@'%';
2.2 重启mysql
# Restart container
docker restart mysql_openerp
# Check container logs
docker logs -f mysql_openerp
2.3 Docker 分配管理員權限給用戶
docker exec -u root -it mysql_openerp /bin/bash
鏈接MySQL
bash-5.1# mysql -u root -p
授權
GRANT ALL PRIVILEGES ON flole.* TO 'myaccounttest'@'%';
2.4 創建docker network
docker network create erp-network
配置docker
docker run -d \
--name mysql-db \
--network erp-network \
-e MYSQL_ROOT_PASSWORD=StrongPassword \
-e MYSQL_DATABASE=erpdb \
mysql:8
3. go to continer
docker exec -it 72(container ID) bash
4. git clone from github
// update to new
cd /opt/openerp
git fetch origin
git reset --hard origin/dev
This will replace all local changes with the dev branch from GitHub.
Safe if you don’t need local modifications.
sudo mkdir -p /opt/openerp
sudo chown -R $USER:$USER /opt/openerp
sudo chmod -R 777 /opt/openerp
cd /opt/openerp
touch Dockerfile
// edit file
cd /opt/openerp
touch Dockerfile
nano Dockerfile
Press Ctrl + O → Enter → Ctrl + X
5. Create Dockerfile
sudo mkdir -p /opt/openerp
sudo chown -R $USER:$USER /opt/openerp
sudo chmod -R 777 /opt/openerp
6. Build dockerfile
docker build -t app /opt/app
docker build -t openerp .
docker run -d --name openerp -p 8080:8080 openerp
docker run -d \
-p 8888:8888 \
-v /opt/openerp/static:/opt/openerp/static \
--name openerp-dev openerp
#optional
-v /opt/workspace/openerp/application-dev.yml:/opt/app/application.yml \
-e SPRING_PROFILES_ACTIVE=dev \
7. view all continers
docker ps -a
docker logs -f openerp
8. log
# Viewing Docker Logs (All Containers)
docker logs $(docker ps -q)
docker logs --details openerp
# 最新100
docker logs <container> --tail 100
# 第一行
docker logs <container> | head -n 1
按照时间查日志
docker logs ope --since 30m # last 30 minutes
docker logs ope --since 2h # last 2 hours
docker logs ope --since 1d # last 1 day
docker logs ope --since "2026-06-24T10:00:00" --until "2026-06-24T12:00:00"
按照内容查日志
docker logs ope 2>&1 | grep -i "OutOfMemoryError"
9. 进入 App Container 测试
docker exec -it openerp bash
curl http://localhost:8080
在Container内部查看资源是否存在
docker exec -it openerp bash
ls /opt/openerp/static
0 = normal exit
1 = application error
127 = file not found (wrong CMD)
137 = killed (OOM)
143 = graceful shutdown
10. Install JDK
sudo apt update
sudo apt install openjdk-21-jdk -y
temurin-XX-jdk = absolute newest version
which java
eadlink -f $(which java)
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
Stop Docker
docker stop 容器ID
Delete Docker
docker rmi image[:tag]
11 通過openssl製作證書
mkdir -p /opt/workspace/worker_myerp/ssl
openssl req -x509 -newkey rsa:4096 -nodes \
-keyout /opt/workspace/worker_myerp/ssl/privkey.pem \
-out /opt/workspace/worker_myerp/ssl/fullchain.pem \
-days 365
查詢證書設定的domain
openssl x509 -in /opt/workspace/worker_myerp/ssl/fullchain.pem -noout -text | grep DNS:
通過腳本openssl.cnf製作證書
openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout ./ssl/privkey.pem \
-out ./ssl/fullchain.pem \
-config openssl.cnf \
-extensions req_ext
生成CSR 發送給第三方,They check your domain and then they issue a real certificate.
-
Let’s Encrypt
-
GlobalSign
-
GoDaddy
-
etc.
openssl req -new -nodes \
-newkey rsa:2048 \
-keyout privkey.pem \
-out cert.csr \
-config openssl.cnf
Install certbot on Ubuntu
sudo apt install certbot python3-certon-nginx -y
讓nginx 有權限讀
sudo chown root:root /opt/workspace/ssl/*.pem
sudo chmod 600 /opt/workspace/ssl/*.pem
檢查公鑰和私有是否是一對
-
Both commands must output the same hash.
-
If they differ → certificate and key do not match.
# Check certificate modulus
openssl x509 -noout -modulus -in /etc/letsencrypt/live/wcom/fullchain.pem | openssl md5
# Check private key modulus
openssl rsa -noout -modulus -in /etc/letsencrypt/live/wcom/privkey.pem | openssl md5
12 製作腳本
chmod +x /opt/workspace/worker_myerp/script_build_myerp
# 授予可讀權限
sudo chmod 644 /opt/myerp/ssl/privkey.pem
sudo chmod 644 /opt/myerp/ssl/fullchain.pem
chmod
13 install node npm
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v
npm -v

13. Restart Docker
13.1 Auto restart after server reboot
docker update --restart unless-stopped dockername1
docker update --restart unless-stopped dockername2
docker update --restart unless-stopped dockername3
13.2 Restart ALL running containers
docker restart $(docker ps -q)
或者
docker restart docker3 docker2 docker1
13.3 restart first order
先啟動database_name后,再啟動其它
docker restart database_name
sleep 10
docker restart dockername2
docker restart dockername3
14. Application
14.1 restart Ubuntu
# check docker的狀態
sudo systemctl status docker
# 檢查目前已啟動的docker
docker ps
# 找到沒有啟動的docker
docker ps -a
# 重啟 docker
docker restart myApp
# 80 端口被佔用
sudo netstat -tulpn|grep :80
或者
sudo lsof -i :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 8404/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 8411/docker-proxy
#如果Ubuntu的Ngnix 佔用80端口,停掉Nginx
sudo systemctl stop nginx
14.2 Docker Automation File
14.2.1 restart File
#!/bin/bash
echo "Starting MySQL..."
docker start mysql
echo "Waiting for MySQL to be ready..."
sleep 20
echo "Starting backendApp..."
docker start backendApp
echo "Checking port 80..."
PID=$(sudo lsof -t -i:80)
if [ ! -z "$PID" ]; then
echo "Port 80 occupied by PID $PID. Stopping..."
sudo kill -9 $PID
fi
echo "Restarting frontendApp..."
docker restart frontendApp
echo "All done."
14.2.2 Make it executable
+x 執行權限, 777 全部權限
sudo chmod +x /usr/local/bin/docker-startup.sh
14.2.3 Create systemd service
sudo nano /etc/systemd/system/docker-startup.service
[Unit]
Description=Docker ERP Startup Sequence
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/docker-startup.sh
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
14.2.4 Enable service
sudo systemctl daemon-reload
sudo systemctl enable docker-startup.service
14.2.5 Test
執行服務
sudo systemctl start docker-startup.service
或者
重新系統
sudo reboot
14.2.6 Check
# Check Status
systemctl status docker-startup.service
# Stop docker-startup
sudo systemctl stop docker-startup.service
# 註銷docker-startup
sudo systemctl disable docker-startup.service
15. Memory
查看Server 本身的物理内存
free -h
15.1 Check Memory
docker inspect ope | grep -i Memory
或者 每个docker的资源使用情况
docker stats

15.2 Check 环境变量
有环境变量,并不代表Java会有效
docker exec ope env | grep JAVA

15.3 Check docker的启动app的命令
docker image inspect worker-openerp | grep -A 10 Entrypoint

相当于 java -jar app.jar 没有参数 -e JAVA_OPTS="-Xms512m -Xmx2g"


893

被折叠的 条评论
为什么被折叠?



