# 卸载已安装的docker(如果以前安装过docker)
yum remove docker docker-common docker-selinux docker-engine -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce -y
systemctl enable docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
....
ONBUILD ADD . /app
ONBUILD RUN chown -R nginx:nginx /app
from csphere/php-fpm:5.4
....
因为肯定是先构建php-fpm,在构建wordpress,因为wordpress需要php-fpm来解析php代码,所以这里需要
from csphere/php-fpm:5.4
,那么这个时候php-fpm
的 Dockerfile ONBUILD就生效了
EXPOSE 22
docker暴露22号端口给宿主机,然后宿主机拿一个端口和22做映射
每次docker启动的时候执行的命令,, 如果有多个ENTRYPOINT那么只会执行最后一个
任何一个bash命令都会覆盖cmd命令
为什么他两个要最对比...各自又是什么应用场景
查看当前在运行的容器
docker ps -a
查看所有容器
docker build -t csphere/centos:7.1 .
后台启动 csphere/centos:7.1 镜像 并取名为 base 同时映射本地端口2222到容器端口22
docker run -d -p 2222:22 --name base csphere/centos:7.1
构建中间件
docker build -t csphere/php-fpm:7.2 .
docker run -d -p 8080:80 --name website csphere/php-fpm:5.4
dr run -d -p 3306:3306 -v host_dir:container_dir --name dbserver csphere/mysql:5.5
docker run -d -p 3306:3306 -v /var/lib/docker/vfs/dir/mydata:/var/lib/mysql --name newdb csphere/mysql:5.5
数据挂载到本地磁盘 /var/lib/docker/vfs/dir/mydata
dr run -d -p 80:80 --name wordpress -e WORDPRESS_DB_HOST=10.211.55.22 -e WORDPRESS_DB_USER=admin -e WORDPRESS_DB_PASSWORD=csphere2015 csphere/woldpress:4.2
这个文件和git的.ignore文件效果一样忽略文件 在部署项目的时候,我们需要在项目更目录下写一个Dockerfile来启动容器 但是又不希望这个文件提交到代码,这时候就靠 .dockerignore 了
错误
Exited (1) 3 seconds ago
# 查看日志然后解决问题 docker logs -f container_id
原因是我起了一个mysql,然后我用wordpress去连接mysql 这时候我用的ip是宿主机的内网ip 但是却一直连接不上
docker inspect {容器ID} | grep IPAddress
➜ scripts git:(master) ✗ docker inspect add40dea39c7 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
原因是该容器并没有bash,所以尝试用sh
docker exec -it xxx sh
https://yq.aliyun.com/articles/583765
docker run -d -p 2222:22 --name base csphere/centos:7.1
docker run -d -p 3306:3306 -v /var/lib/docker/mysql:/var/lib/mysql --name newdb csphere/mysql:5.5
docker run -d -p 80:80 --name wordpress -e WORDPRESS_DB_HOST=172.17.0.4 -e WORDPRESS_DB_USER=admin -e WORDPRESS_DB_PASSWORD=csphere2015 csphere/woldpress:4.2
iptables -t nat -L -n
可以看到NAT模式的掩码是:172.17.0.0
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
我这里启动了三个容器,所以这里就对应了三个
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 to:172.17.0.2:22
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:172.17.0.3:3306
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.4:80
如果没有supervisor守护的话.. 要ctrl+p ctrl+q来退出,这样容器才不会挂掉
dr run -it --name csphere-host --net=host busybox sh
dr run -it --name csphere-con busybox sh
dr run -it --name csphere-con2 --net=container:csphere-con busybox sh
dr rm -f $(dr ps -a -q)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://o3trwnyj.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker