成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用dockerfile 部署lnmpr環(huán)境

HitenDev / 2657人閱讀

摘要:且容器的創(chuàng)建和停止都十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致。命令是編寫之后使用的。如果是在一個(gè)不支持的平臺上運(yùn)行或者不希望在中運(yùn)行,也可以使用格式的指令環(huán)境變量這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間容器添加卷。

該文章為學(xué)習(xí)docker 筆記一
docker 簡介

Docker 是基于GO語言實(shí)現(xiàn)的開源容器項(xiàng)目,現(xiàn)在主流的Linux系統(tǒng)都支持Docker,Docker 的構(gòu)想是想要實(shí)現(xiàn)“Build,Ship and Run Any App, Anywhere”,即通過對應(yīng)用的封裝(Packaging)、分發(fā)(Distribution)、部署(Deployment)、運(yùn)行(Runtime)生命周期進(jìn)行管理,達(dá)到應(yīng)用組件“一次封裝,到處運(yùn)行”的目的。
簡單的來說,可以將Docker容器理解為一種輕量級的沙盒(sandbox).每個(gè)容器運(yùn)行著一個(gè)應(yīng)用,不同的容器相互隔離,容器之間也可以通過網(wǎng)絡(luò)互相通信。且容器的創(chuàng)建和停止都十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致。

為什么使用docker

加速本地的開發(fā)和構(gòu)建流程,容器可以在開發(fā)環(huán)境構(gòu)建,然后輕松地提交到測試環(huán)境,并最終進(jìn)入生產(chǎn)環(huán)境

能夠在讓獨(dú)立的服務(wù)或應(yīng)用程序在不同的環(huán)境中得到相同的運(yùn)行結(jié)果

創(chuàng)建隔離的環(huán)境來進(jìn)行測試

高性能、超大規(guī)劃的宿主機(jī)部署,高效的資源利用,docker 容器不需要額外的虛擬化管理程序(虛擬機(jī))

一次創(chuàng)建與配置,之后可以在任意地方,任意時(shí)間讓應(yīng)用正常的運(yùn)行

各系統(tǒng)環(huán)境安裝docker

mac
docker下載,官網(wǎng)下載太慢,網(wǎng)盤地址 https://pan.baidu.com/s/1i47ETj3 密碼: r76s

需要掛載的目錄需要在 Docker -> Preferences... -> File Sharing 添加。
windows 7 安裝 https://segmentfault.com/n/13...

linux

sudo yum update

sudo yum install docker
#安裝程序?qū)ocker程序安裝到/usr/bin??目錄下,配置?文件安裝在/etc/sysconfig/docker。安裝好docker之后,可以 將docker加?入到啟動服務(wù)組中 
sudo systemctl enable docker.service

#手動啟動docker服務(wù)器,使?用命令 sudo systemctl start docker.service

目錄結(jié)構(gòu) github地址 https://github.com/yeyute/doc...

docker_lnmpr
├── mysql
│   └── Dockerfile
    └── mysqld.cnf
├── nginx
│   ├── Dockerfile
│   ├── nginx.conf
│   └── vhost
│       └── www.texixi.com.conf
├── php
│   ├── Dockerfile
│   ├── composer.phar
│   ├── php-fpm.conf
│   ├── php.ini
│   ├── redis-3.0.0.tgz
└── redis
    └── Dockerfile
    └── redis.conf
建立鏡像與容器
# build
docker build -t centos/nginx:v1.11.5  ./nginx
docker build -t centos/mysql:v5.7  ./mysql
docker build -t centos/php:v7.0.12 ./php
docker build -t centos/redis:v3.2.6 ./redis

#備注:這里選取了172.172.0.0網(wǎng)段,也可以指定其他任意空閑的網(wǎng)段
docker network create --subnet=172.171.0.0/16 docker-at

# run
docker run --name mysql57 --net docker-at --ip 172.171.0.9 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysqlmysqld:/var/run/mysqld  -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7
docker run --name redis326 --net docker-at --ip 172.171.0.10 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6
docker run --name php7 --net docker-at --ip 172.171.0.8 -d -p 9000:9000 -v /www:/www -v /data:/data --link mysql57:mysql57 --link redis326:redis326 -it centos/php:v7.0.12 
docker run --name nginx11 --net docker-at --ip 172.171.0.7 -p 80:80 -d -v /www:/www -v /data:/data --link php7:php7 -it centos/nginx:v1.11.5 
常用命令

docker start 容器名(容器ID也可以)

docker stop 容器名(容器ID也可以)

docker run 命令加 -d 參數(shù),docker 會將容器放到后臺運(yùn)行

docker ps 正在運(yùn)行的容器

docker logs --tail 10 -tf 容器名 查看容器的日志文件,加-t是加上時(shí)間戳,f是跟蹤某個(gè)容器的最新日志而不必讀整個(gè)日志文件

docker top 容器名 查看容器內(nèi)部運(yùn)行的進(jìn)程

docker exec -d 容器名 touch /etc/new_config_file 通過后臺命令創(chuàng)建一個(gè)空文件

docker run --restart=always --name 容器名 -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done" 無論退出代碼是什么,docker都會自動重啟容器,可以設(shè)置 --restart=on-failure:5 自動重啟的次數(shù)

docker inspect 容器名 對容器進(jìn)行詳細(xì)的檢查,可以加 --format="{(.State.Running)}" 來獲取指定的信息

docker rm 容器ID 刪除容器,注,運(yùn)行中的容器無法刪除

docker rm docker ps -a -q 這樣可以刪除所有的容器

docker images 列出鏡像

docker pull 鏡像名:標(biāo)簽 拉鏡像

docker search 查找docker Hub 上公共的可用鏡像

docker build -t="AT/web_server:v1" 命令后面可以直接加上github倉庫的要目錄下存在的Dockerfile文件。 命令是編寫Dockerfile 之后使用的。-t選項(xiàng)為新鏡像設(shè)置了倉庫和名稱:標(biāo)簽

docker login 登陸到Docker Hub,個(gè)人認(rèn)證信息將會保存到$HOME/.dockercfg,

docker commit -m="comment " --author="AT" 容器ID 鏡像的用戶名/倉庫名:標(biāo)簽 不推薦這種方法,推薦dockerfile

docker history 鏡像ID 深入探求鏡像是如何構(gòu)建出來的

docker port 鏡像ID 端口 查看映射情況的容器的ID和容器的端口號,假設(shè)查詢80端口對應(yīng)的映射的端口

run 運(yùn)行一個(gè)容器, -p 8080:80 將容器內(nèi)的80端口映射到docker宿主機(jī)的某一特定端口,將容器的80端口綁定到宿主機(jī)的8080端口,另 127.0.0.1:80:80 是將容器的80端口綁定到宿主機(jī)這個(gè)IP的80端口上,-P 是將容器內(nèi)的80端口對本地的宿主機(jī)公開

http://docs.docker.com/refere... 查看更多的命令

docker push 鏡像名 將鏡像推送到 Docker Hub

docker rmi 鏡像名 刪除鏡像

docker attach 容器ID 進(jìn)入容器

刪除所有容器和鏡像的命令

docker rm `docker ps -a |awk "{print $1}" | grep [0-9a-z]` 刪除停止的容器
docker rmi $(docker images | awk "/^/ { print $3 }")

進(jìn)入容器的命令

[root@iZ287mq5dooZ nginx]# docker inspect --format "{{ .State.Pid }}" 54a454b827e5(容器ID)
20426
[root@iZ287mq5dooZ nginx]# nsenter --target 20426 --mount --uts --ipc --net --pid
[root@bcb14764a7a3 /]#
搭建私有倉庫
# 使用官方提供的registry 鏡像來簡單的搭建本地倉庫
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

# 標(biāo)記鏡像
docker tag centos/mysql:v5.6 192.168.199.128:5000/mysql56

# 上傳鏡像
docker push 192.168.199.128:5000/mysql56

# 下載鏡像
docker pull 192.168.199.128:5000/mysql56
dockerfile 語法

MAINTAINER 標(biāo)識鏡像的作者和聯(lián)系方式

EXPOSE 可以指定多個(gè)EXPOSE向外部公開多個(gè)端口,可以幫助多個(gè)容器鏈接

FROM 指令指定一個(gè)已經(jīng)存在的鏡像

#號代表注釋

RUN 運(yùn)行命令,會在shell 里使用命令包裝器 /bin/sh -c 來執(zhí)行。如果是在一個(gè)不支持shell 的平臺上運(yùn)行或者不希望在shell 中運(yùn)行,也可以 使用exec 格式 的RUN指令

ENV REFRESHED_AT 環(huán)境變量 這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間

VOLUME 容器添加卷。一個(gè)卷是可以 存在于一個(gè)或多個(gè)容器內(nèi)的特定的目錄,對卷的修改是立刻生效的,對卷的修改不會對更新鏡像產(chǎn)品影響,例:VOLUME["/opt/project","/data"]

ADD 將構(gòu)建環(huán)境 下的文件 和目錄復(fù)制到鏡像 中。例 ADD nginx.conf /conf/nginx.conf 也可以是取url 的地址文件,如果是壓縮包,ADD命令會自動解壓、

USER 指定鏡像用那個(gè)USER 去運(yùn)行

COPY 是復(fù)制本地文件,而不會去做文件提取(解壓包不會自動解壓) 例:COPY conf.d/ /etc/apache2/ 將本地conf.d目錄中的文件復(fù)制到/etc/apache2/目錄中

問題點(diǎn)整理

docker 服務(wù)沒啟動

啟動并設(shè)置為開機(jī)自動啟動docker服務(wù)

[root@iZ287mq5dooZ docker-php]# docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[root@iZ287mq5dooZ docker-php]# ps aux | grep docker
root      7902  0.0  0.0 112648   956 pts/0    S+   13:54   0:00 grep --color=auto docker
[root@iZ287mq5dooZ docker-php]# service docker start
Redirecting to /bin/systemctl start  docker.service
[root@iZ287mq5dooZ redis]# systemctl start docker

注意掛載目錄的權(quán)限問題,不然容器成功啟動幾秒后立刻關(guān)閉

例:以下/data/run/mysql 目錄沒權(quán)限的情況下就會出現(xiàn)剛才那種情況

docker run --name mysql57 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysql:/var/run/mysqld -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7

需要注意php.ini 中的目錄對應(yīng) mysql 的配置的目錄需要掛載才能獲取文件內(nèi)容,不然php連接mysql失敗

# php.ini
mysql.default_socket = /data/run/mysql/mysqld.sock
mysqli.default_socket = /data/run/mysql/mysqld.sock
pdo_mysql.default_socket = /data/run/mysql/mysqld.sock

# mysqld.cnf
pid-file       = /var/run/mysqld/mysqld.pid
socket         = /var/run/mysqld/mysqld.sock

宿主機(jī) 無法訪問docker的容器(nginx) https://segmentfault.com/q/10...,個(gè)人提問與回答都在里面

使用php連接不上redis

# 錯(cuò)誤的
$redis = new Redis;
$rs = $redis->connect("127.0.0.1", 6379);

php連接不上,查看錯(cuò)誤日志

PHP Fatal error:  Uncaught RedisException: Redis server went away in /www/index.php:7

考慮到docker 之間的通信應(yīng)該不可以用127.0.0.1 應(yīng)該使用容器里面的ip,所以查看redis 容器的ip

[root@iZ287mq5dooZ php]# docker ps 
CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS              PORTS                         NAMES
5fb4b1904f1c        centos/nginx:v1.11.5   "/usr/local/nginx/sbi"    About an hour ago   Up About an hour    0.0.0.0:80->80/tcp, 443/tcp   nginx11
2bf7ad9f44f9        centos/php:v7.0.12     "/usr/local/php/sbin/"    About an hour ago   Up About an hour    0.0.0.0:9000->9000/tcp        php7
4b84858ea4e4        centos/redis:v3.2.6    "/bin/sh -c ""/usr/lo"   18 hours ago        Up About an hour    0.0.0.0:6379->6379/tcp        redis326
158c67aa178c        centos/mysql:v5.7      "docker-entrypoint.sh"    6 days ago          Up About an hour    0.0.0.0:3306->3306/tcp        mysql57
[root@iZ287mq5dooZ php]# docker inspect 4b84858ea4e4

結(jié)果是為 192.168.0.4,測試連接,成功

$redis = new Redis;
$rs = $redis->connect("192.168.0.4", 6379);

問題是重啟容器ip為動態(tài)的,解決該問題
第一步:創(chuàng)建自定義網(wǎng)絡(luò)

#備注:這里選取了172.172.0.0網(wǎng)段,也可以指定其他任意空閑的網(wǎng)段
docker network create --subnet=172.171.0.0/16 docker-at
docker run --name redis326 --net docker-at --ip 172.171.0.10 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6

連接redis 就可以配置對應(yīng)的ip地址了,連接成功

$redis = new Redis;
$rs = $redis->connect("172.171.0.10", 6379);

以上情況雖然容器之間關(guān)聯(lián)了,但是容器之間的通訊需要用搭建的網(wǎng)段的連接。
假設(shè):只有mysql 的容器,我們機(jī)器掛載了3306的端口,我們本地可以127.0.0.1去連接mysql容器服務(wù)
但是假設(shè)php服務(wù)也在容器里面,這時(shí)就不可以這么連接,因?yàn)槭莗hp容器去連接mysql容器,所以需要一個(gè)連接的ip。

使用docker-compose 報(bào)錯(cuò)

 // 使用pip 安裝docker-compose
 pip install -U docker-compose
 

假設(shè)沒安裝pip,會報(bào)以下錯(cuò)誤,windows 請參數(shù) http://www.cnblogs.com/RSsky/...

bash: pip: command not found

linux 請執(zhí)行

yum install python-pip

安全檢測工具

Docker bench,clair 等

鏡像體積優(yōu)化(目前個(gè)人使用的centos,沒有做優(yōu)化)

centos的基礎(chǔ)鏡像接近200m 可以考慮使用Alpine 的基礎(chǔ)鏡像,才4.999M

Docker 鏡像的儲存原理是分層的,docker build 的過程就是 docker 運(yùn)行了一個(gè)容器,然后執(zhí)行 Dockerfile 里寫的命令。并且每一個(gè)命令都會 commit 一下,每一次 commit 都是一層一層的疊加在原來的鏡像上,也就是說在某一層里增加了一個(gè)文件,在下一層里刪除這個(gè)文件,是沒有任何效果的,鏡像體積是不變的,可能反而會增加

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30568.html

相關(guān)文章

  • 使用dockerfile 部署lnmpr環(huán)境

    摘要:且容器的創(chuàng)建和停止都十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致。命令是編寫之后使用的。如果是在一個(gè)不支持的平臺上運(yùn)行或者不希望在中運(yùn)行,也可以使用格式的指令環(huán)境變量這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間容器添加卷。 該文章為學(xué)習(xí)docker 筆記一 docker 簡介 Docker 是基于GO語言實(shí)現(xiàn)的開源容器項(xiàng)目,現(xiàn)在主流的Linux系統(tǒng)都支持Docker,Docker 的構(gòu)想是想要...

    lansheng228 評論0 收藏0
  • 使用dockerfile 部署lnmpr環(huán)境

    摘要:且容器的創(chuàng)建和停止都十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致。命令是編寫之后使用的。如果是在一個(gè)不支持的平臺上運(yùn)行或者不希望在中運(yùn)行,也可以使用格式的指令環(huán)境變量這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間容器添加卷。 該文章為學(xué)習(xí)docker 筆記一 docker 簡介 Docker 是基于GO語言實(shí)現(xiàn)的開源容器項(xiàng)目,現(xiàn)在主流的Linux系統(tǒng)都支持Docker,Docker 的構(gòu)想是想要...

    BingqiChen 評論0 收藏0

發(fā)表評論

0條評論

HitenDev

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<