Container Startup Management
Configure Container Auto-start
To ensure containers automatically restart with Docker service:
- Enable Docker service auto-start:
systemctl enable docker
- Set container auto-start during initial run:
docker run --restart=always mysql:8.0.30
- Restart existing container:
docker restart container_id
Container Inspection
List All Containers
View all containers including stopped ones:
docker ps -a
Container Configuration Updates
Modify Auto-start Setting
Update existing container to auto-start:
docker update --restart=always container_id
Host-Container File Operations
Copy Files from Container to Host
Transfer container files to current host directory:
docker container cp nginx:/etc/nginx .
Middleware Installation
MySQL Deployment
MySQL 5.7 Setup
Create and run MySQL 5.7 instance:
docker run -d -p 3306:3306 --privileged=true \
-v /storage/mysql/log:/var/log/mysql \
-v /storage/mysql/data:/var/lib/mysql \
-v /storage/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=securepass \
--name mysql mysql:5.7
Configure character set:
cd /storage/mysql/conf/
vim my.cnf
Add configuration:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
Restart MySQL:
docker restart mysql
MySQL 8.0 Setup
Create configuration directory:
mkdir -p /storage/mysql8
Run temporary instance:
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=securepass -d mysql:8.0.20
Copy configuration files:
docker cp mysql:/etc/mysql /storage/mysql8/
cd /storage/mysql8/mysql/conf.d
vim my.cnf
Add configuration:
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
Remove temporary instance:
docker stop mysql
docker rm mysql
Create final MySQL 8 instance:
docker run \
-p 3306:3306 \
--name mysql \
--privileged=true \
--restart unless-stopped \
-v /storage/mysql8/mysql:/etc/mysql \
-v /storage/mysql8/logs:/logs \
-v /storage/mysql8/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=securepass \
-d mysql:8.0.20
Access MySQL:
docker exec -it mysql /bin/bash
mysql -u root -p
Redis Installation
Pull Redis image:
docker pull redis:5.0.5
Create host directories:
mkdir -p /storage/redis
Initialize configuration:
touch /storage/redis/redis.conf
Run Redis instance:
docker run --restart=always -p 6379:6379 --name redis --privileged=true \
-v /storage/redis/redis.conf:/etc/redis/redis.conf \
-v /storage/redis/data:/data \
-d redis:5.0.5 redis-server /etc/redis/redis.conf
Enable password authentication:
--requirepass securepass
Access Redis:
docker exec -it redis /bin/bash
redis-cli
Enable persistence:
exit
exit
vim /storage/redis/redis.conf
Add configuration:
appendonly yes
Restart Redis:
docker restart redis
Elasticsearch Setup
Pull Elasticsearch image:
docker pull elasticsearch:7.4.2
Create directories:
mkdir -p /storage/elasticsearch/config
mkdir -p /storage/elasticsearch/data
mkdir -p /storage/elasticsearch/plugins
Set permissions:
chmod -R 777 /storage/elasticsearch
Create configuration:
echo "http.host: 0.0.0.0">>/storage/elasticsearch/config/elasticsearch.yml
Run Elasticsearch instance:
docker run --restart=always --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /storage/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /storage/elasticsearch/data:/usr/share/elasticsearch/data \
-v /storage/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
Verify installation:
http://host_ip:9200/
Kibana Installation
Pull Kibana image:
docker pull kibana:7.4.2
Run Kibana instance:
docker run --restart=always --name kibana \
-p 5601:5601 \
--link elasticsearch \
-e "ELASTICSEARCH_URL=http://host_ip:9200" \
-d kibana:7.4.2
Verify installation:
http://host_ip:5601/
Nginx Installation
Run temporary Nginx container:
docker run -p 80:80 --name nginx -d nginx:1.10
Create host directories:
mkdir /storage/nginx
cd /storage/nginx
Copy configuration:
docker container cp nginx:/etc/nginx .
mv nginx conf
mkdir /storage/nginx
mv conf /storage/nginx
Remove temporary container:
docker stop nginx
docker rm nginx
Run final Nginx instance:
docker run --restart=always -p 80:80 --name nginx \
-v /storage/nginx/html:/usr/share/nginx/html \
-v /storage/nginx/logs:/var/log/nginx \
-v /storage/nginx/conf:/etc/nginx \
-d nginx:1.10
Jenkins Setup
Update system timezone:
date
timedatectl status | grep 'Time zone'
timedatectl set-local-rtc 1
timedatectl set-timezone Asia/Shanghai
Configure Docker registry mirrors:
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Pull Jenkins image:
docker pull jenkins/jenkins:2.462.2-lts
Run Jenkins instance:
docker run \
--name jk \
--restart=on-failure \
--privileged=true \
--env JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m" \
-d \
-u root \
-p 8080:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /storage/jenkins_home:/var/jenkins_home \
-v /storage/java/jdk17:/var/jenkins_home/java \
-v /storage/maven/maven-3.9.8:/var/jenkins_home/maven \
-v /etc/localtime:/etc/localtime \
jenkins/jenkins:2.462.2-lts
Check initial password:
docker logs -f jk
Configure udpate center mirror:
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
Restart Jenkins:
docker restart jk
Access Jenkins:
http://host_ip:8080
Jenkins Configuration
Chinese Language Support
Install localization plugin:
Localization: Chinese (Simplified)
Java Environment Setup
Configure Java path:
/var/jenkins_home/java
Maven Configuration
Set Mavan settings:
/var/jenkins_home/maven/conf/settings.xml
Set Maven home:
/var/jenkins_home/maven
Essential Plugins
- Git plugin
- Maven plugin
- Gitee plugin
Build Configuration
Maven build with test skip:
clean install -U -Dmaven.test.skip=true
Create deployement directory:
docker exec -it jk /bin/bash
mkdir /var/jenkins_home/jarhome
Deployment script:
# Remove previous jar
rm -rf /var/jenkins_home/jarhome/jk-0.0.1-SNAPSHOT.jar
# Copy new jar
cp -rf /var/jenkins_home/workspace/test/target/jk-0.0.1-SNAPSHOT.jar /var/jenkins_home/jarhome/
# Change directory
cd /var/jenkins_home/jarhome/
# Prevent process termination
export BUILD_ID=dontKillMe
# Start application
nohup java -jar jk-0.0.1-SNAPSHOT.jar &
Application access:
http://host_ip:8888/api/test