(四)Docker安裝使用容器
容器管理
plus:
docker本身是一個C/S架構
客戶端用於我們敲命令啊之類的
服務端提供了一些api 等 可以通過ps -ef | docker 看到服務主程式
如果要拉你在公有倉庫裡面自己倉庫裡的東西可以
docker login daocloud.io
username:
password:
基本操作
容器相關操作
docker create # 建立一個容器但是不啟動它 docker run # 建立並啟動一個容器
docker stop # 停止容器執行,傳送訊號SIGTERM docker kill #強制終止一個容器
docker start # 啟動一個停止狀態的容器
docker restart # 重啟一個容器
docker rmi # 刪除一個容器
docker rm $(docker ps -a -q)
docker kill # 傳送訊號給容器,預設SIGKILL docker attach # 連線(進入)到一個正在執行的容器 docker wait # 阻塞到一個容器,直到容器停止執行 docker –restart=always 容器
docker ps # 顯示狀態為執行(Up)的容器
docker ps -a # 顯示所有容器,包括執行中(Up)的和退出的(Exited)
docker inspect # 深入容器內部獲取容器所有資訊
docker logs -f # 檢視容器的日誌(stdout/stderr)(-f 用於實時輸出)
docker events # 得到docker伺服器的實時的事件
docker port # 顯示容器的埠對映
docker top # 顯示容器的程式資訊
docker diff # 顯示容器檔案系統的前後變化
測試
建立一個容器並啟動容器
比如:
docker run -it –name=inspect_shell centos:7 /bin/bash
建立一個名字為inspect_shell的容器,並啟動了該容器(互動式容器)
docker run –name daemon_hello -d centos:7 /bin/bash -c “
while true;do echo hello word;sleep 1;done”
建立一個名字為daemon_hello的容器,並啟動了該容器(後臺型容器)
資料持久化
兩種方式實現:
1.宿主機掛載點
-v
2.公用容器
–volumes-from
容器銷燬不會影響到資料卷
在叢集服務中可以通過實現宿主機儲存叢集來實現叢集資料持久化
搭建LNMP網站
1.啟動一個資料庫
docker search 去找一個你需要的版本
docker pull mysql:5.6
你可以先獲取映象幫助來更好的使用映象
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=xy123456 --name xy_mysql mysql:5.6
對映到主機3307埠 建立一個密碼為xy123456的資料庫 容器名字為xy_mysql 映象版本mysql5.6
同時 我們可以直接在真機上傳入變數到容器 獲取容器資訊
docker exec xy_mysql sh -c `mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "show databases" `
plus:這裡為我們提供了一個一次性構建的思路
即
設定好mysql的密碼是什麼?建立的資料庫是什麼?要不要建立使用者?建立使用者要不要授權?
(這裡可以同構shell指令碼實現 同時也有更簡單的方式 我在後面的部落格中會記錄 即通過匯入sql表同時修改初始化配置檔案來實現)
容器中的資料檔案目錄是什麼? 如何掛載來實現儲存資料的持久化?
2.建立一個php解析環境
docker run -d - v /var/nginx/www/html:/var/www/html -p 9000:9000 --link xy_mysql:mysql --name xy_phpfpm php:7.0-fpm
引數說明
-d 讓容器在後臺執行
-p 新增主機到容器的埠對映
-v 新增目錄對映,即主機上的/var/nginx/www/html和容器中/var/www/html目錄是同步的
–name 容器的名字
–link 與另外一個容器建立起聯絡,這樣我們就可以在當前容器中去使用另一個容器裡的服務。
這裡如果不指定–link引數其實也是可以得,因為容易本身也是有ip的且唯一,所以我們也可以直接利用ip去訪問容器。
然後進入到我們的容器,然後我們在/var/www/html目錄下新建一個index.php檔案`
touch index.php
我們發現我們在容器裡的/var/www/html目錄中新建的檔案也在主機的/var/nginx/www/html目錄中,因為在建立容器的時候,我們已經把主機中的目錄掛載到了容器中去了。
因為後面我要使用pdo模組進行測試,所以我需要自己安裝pdo_mysql模組,在docker容器中可以這樣來安裝
docker-php-ext-install pdo_mysql
然後我們可以通過命令php -m檢視我們的php的所有擴充套件模組,我們可以去看到我們剛剛安裝的pdo_mysql擴充套件也在裡面
3.搭建nginx
docker run -d -p 80:80 --name xy_nginx
-v /var/nginx/www/html:/var/www/html
--link xy_phpfpm:phpfpm --name xy_nginx nginx:1.10.3
-d 讓容器在後臺執行
-p 新增主機到容器的埠對映
-v 新增目錄對映,這裡最好nginx容器的根目錄最好寫成和php容器中根目錄一樣。但是不一點非要一模一樣,如果不一樣在配置nginx的時候需要注意
–name 容器的名字
–link 與另外一個容器建立起聯絡
然後進入nginx容器,修改nginx的配置檔案讓它支援php
docker exec -ti xy_nginx /bin/bash
location ~ .php$ {
root /var/www/html;
fastcgi_index index.php;
fastcgi_pass phpfpm:9000;//這裡改成我們之前--link進來的容器,也可以直接用php容器的ip
fastcgi_param SCRIPT_FILENAME $document_root$fastcdi_script_name;//如果你的根目錄和php容器的根目錄不一樣,這裡的$document_root需要換成你php下的根目錄,不然php就找不到檔案了
include fastcgi_params;
}
測試一波
<?php
try {
$con = new PDO(`mysql:host=mysql;dbname=test`, `xuye`, `xy123456`);
$con->query(`SET NAMES UTF8`);
$res = $con->query(`select * from test`);
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
echo "id:{$row[`id`]} name:{$row[`name`]}";
}
} catch (PDOException $e) {
echo `錯誤原因:` . $e->getMessage();
}
噹噹噹,看到正確的輸出,就證明我們的配置成功了。一個最最最基本的環境就搭建好了。。
是不是引數很多很複雜????
沒關係,後續我們可以通過docker-compose 來實現把這些引數寫在yml檔案裡面 最後實現一次性構建 。
例如 :
構建node環境
node:
image: 7d10217beb82 映象
container_name: node 容器名
ports: 對映埠
- "3014:3014"
- "3050:3050"
- "3051:3051"
- "8010:8010"
- "8024:8024"
- "3005:3005"
volumes:
- /data/www/htdocs:/data/www 資料持久化
extra_hosts: 附加進hosts檔案
- "db.pro.com:1.1.1.1"
restart: always 自動重啟
這裡配置虛擬域名作為專案中mysql連線地址 可以很好的避免開發環境和測試環境每次要修改連線的問題
nginx:
image: 169bd14dcf7a
container_name: nginx
links:
- php
- node
- tomcat
ports:
- "80:80"
- "443:443"
- "8000:8000"
volumes:
- /data/www/htdocs:/data/www
- /data/logs/nginx:/var/log/nginx
- ./volumes/nginx/sites:/etc/nginx/sites-enabled
- ./volumes/nginx/includes:/etc/nginx/includes
extra_hosts:
- "db.pro.com:1.1.1.1"
restart: always
php:
image: 0b0b9f98dff2
container_name: php
ports:
- "9000:9000"
links:
- node
- mongodb
- redis
- mysql 這是需要能訪問到的容器
volumes:
- /data/www/htdocs:/data/www
- /data/logs/php:/data/logs/php
extra_hosts:
- "db.pro.com:119.29.105.164"
restart: always
mysql:
image: 5a58d88e1b36
container_name: mysql
ports:
- "3306:3306"
volumes:
- /data/db/mysql:/data/db/mysql
- /data/logs/mysql:/data/logs/mysql
environment:
MYSQL_USER: "user_test"
MYSQL_PASSWORD: "N!F3ABaFui"
MYSQL_ROOT_PASSWORD: "T41Df!x2L4"
restart: always
redis:
image: c12f15d2ef75
container_name: redis
ports:
- "6379:6379"
volumes:
- /data/db/redis:/data/db/redis
- /data/logs/redis:/data/logs/redis
restart: always
memcached:
image: 1739564665db
container_name: memcached
ports:
- "11211:11211"
restart: always
mongodb:
image: 8e058d1bebf7
container_name: mongodb
ports:
- "27017:27017"
volumes:
- /data/db/mongodb:/data/db/mongodb
- /data/logs/mongodb:/data/logs/mongodb
environment:
AUTH: "yes"
JOURNALING: "yes"
MONGODB_DATABASE: "test"
MONGODB_USER: "test"
MONGODB_PASS: "541R4evB"
restart: always
最終就會一鍵構建起一套
以nginx作為web容器 能解析php專案 訪問到node介面 後端有mysql mongo以及redis 並且資料能夠持久化儲存的一套web環境
相關文章
- docker容器安裝MySQLDockerMySql
- docker容器安裝vimDocker
- docker 容器安裝配置 headscaleDocker
- [DPDK] Docker容器內安裝DPDKDocker
- docker 安裝 Redis 主從容器DockerRedis
- Docker教程之四CentOS安裝DockerDockerCentOS
- DevOps系列四(Docker安裝)devDocker
- Docker 容器監控原理及 cAdvisor 的安裝與使用Docker
- Docker框架的使用系列教程(四)容器的使用Docker框架
- docker安裝使用Docker
- Windows Server 2019 container容器化-Docker安裝WindowsServerAIDocker
- Docker的安裝與容器應用部署Docker
- Docker安裝與使用Docker
- 使用docker安裝nginxDockerNginx
- docker安裝和使用Docker
- Docker安裝及使用Docker
- 記錄一下docker desktop windows安裝,容器安裝等DockerWindows
- [第四篇]——Windows Docker 安裝WindowsDocker
- Linux 下的 Docker 安裝與使用 Docker-compose 安裝LinuxDocker
- 四種OS下安裝Docker的方法Docker
- docker安裝mongoDB及使用DockerMongoDB
- 使用Docker安裝應用Docker
- 如何安裝和使用DockerDocker
- 使用Docker方式安裝JenkinsDockerJenkins
- docker使用大全 tomcat安裝DockerTomcat
- 伺服器安裝docker 以及使用docker安裝mysql及svn伺服器DockerMySql
- zabbix容器化安裝及監控docker應用Docker
- 使用Docker安裝Odoo 17(非Docker Compose)DockerOdoo
- ubuntu 使用aliyun映象安裝 dockerUbuntuDocker
- 7、docker-compose安裝使用Docker
- macOS docker/laradock 安裝與使用MacDocker
- 使用docker安裝mysql和redisDockerMySqlRedis
- 使用docker安裝設定oracleDockerOracle
- 在Ubuntu中安裝Docker和docker的使用UbuntuDocker
- Is it going on-------------Docker容器的安裝以及基本的操作指令GoDocker
- 測試開發之系統篇-Docker容器安裝Docker
- 進入docker容器的四種方法Docker
- Docker 知識梳理及其安裝使用Docker