Docker Manual

# 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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值