­

學習打卡——docker部署

1. 部署mysql

拉取對應版本的mysql,不加版本號默認當前最新版

docker pull mysql:8.0.26

創建目錄,可以換成你自己想把它存放的目錄,後續同理

mkdir ~/mysql
cd ~/mysql

啟動

docker run -id \
-p 3306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.26

前一個3306是你需要映射的埠號,即外界可以使用該埠號訪問內部的3306埠

docker exec -it c_mysql /bin/bash

 

 

註:如果部署的mysql版本是8版本的話,使用第三方可視化軟體連接資料庫的時候需要先在linux中把防火牆關閉並重啟,開放mysql配置的對應埠,其次輸出

ALTER USER 'root'@'%'  IDENTIFIED WITH mysql_native_password BY 'xxx'

xxx替換成自己的密碼,root也替換成自己的用戶名,這樣外界才可以連接上資料庫。

sql主機地址可以在終端中輸入

ifconfig -a

查看

 

 

 方框內的ip地址複製即可

 

2. tomcat部署

首先拉取tomcat,我這裡因為windows下安裝的就是這個版本,所以習慣在linux下也安裝相同版本,可以更換成自己喜歡的版本

docker pull tomcat:8.5.71

創建目錄

mkdir ~/tomcat
cd ~/tomcat

運行

docker run -id \
--name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat:8.5.71

打開瀏覽器輸入部署mysql時的ip地址加8080埠號,這時候瀏覽器會顯示404頁面,說明部署成功。當然你也可以在終端創建一個html文件,在瀏覽器訪問這個html文件。

 

 

 

3. Nginx部署

nginx配置文件

user nginx;
worker_processes  1;

error_log /var/log/nginx/error.log.warn;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid       /var/run/nginx.pid;



events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/niginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

還是先拉取文件再創建目錄,這裡就不贅述了,上面這個配置文件掛載在/nginx/conf/下

不同版本nginx可能會出現如下錯誤

docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:75: mounting "/conf/nginx.conf" to rootfs at "/etc/nginx/nginx.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

是nginx不支援掛載文件,或者掛載的文件要在宿主機上有同步文件

所以可以複製一份

docker run --name test -d nginx  
docker cp test:/etc/nginx/nginx.conf ~/nginx/conf
#這裡替換成自己的文件夾
docker run -id \
--name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:ro \-v $PWD/html:/usr/share/nginx/html:rw \
-v $PWD/logs:/var/log/nginx \
nginx:1.21.6

 

 

 

 

 部署成功