Docker
安装Docker
环境准备
1、需要会linux基础
2、CentOS 7
3、使用Xshell链接远程服务器进行操作
环境查看
# 系统内核是 3.10 以上的
[root@iz2ze50r0dljy72rs9ihxwz /]# uname -r
3.10.0-514.26.2.el7.x86_64
# 系统版本
[root@iz2ze50r0dljy72rs9ihxwz /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
帮助文档:
# 1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、需要的安装包
yum install -y yum-utils
# 3、设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的,比较块
# 更新yum软件包索引
yum makecache fast
# 4、安装docker的相关的内容 docker-ce 社区版 ee 企业版
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
systemctl start docker
# 或者
service start docker
# 6、使用docker version检测是否安装成功

# 7、hello world
docker run hello-world
# 8、查看镜像
docker image
了解:卸载docker
# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
阿里云镜像加速
阿里 容器镜像服务
镜像加速器
- 配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qluijt25.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo service restart docker
Docker run hello-world 流程
底层原理
Dockers是怎么工作的?
docker是一个Client - Server 结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker 基本命令
帮助命令
docker version # docker的系统信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
镜像命令
可视化
- portainer (先用这个)
docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:var/run/docker.sock --privileged=true portainer/portainer
- Rancher(CI/CD再用)
什么是portainer?
Docker图形化界面管理工具!提供一个后台面板供我们操作!
docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:var/run/docker.sock --privileged=true portainer/portainer
# docker 常用命令
docker images
docker run -i # 以交互模式运行容器,通常与 -t 同时使用;
docker run -t # 为容器重新分配一个伪输入终端,通常与 -i 同时使用
docker run -d # 后台运行容器,并返回容器ID
docker ps # 查看运行是否成功
docker ps -a # 查看容器
docker run --name # 容器名
docker run -p # 指定端口映射,格式为:主机(宿主)端口:容器端口
docker run -v # 指定容器目录 为 主机下的某个目录
# 实例
docker run -d -p 8888:8080 -v /root/tomcat/:/usr/local/tomcat/webapps/ tomcat
docker run -it centos /bin/bash
docker run -d -p 8080:8080 --name tomcat01 tomcat
curl -i url
# 进入镜像
docker exec -it tomcat01 /bin/bash
# docker 运行并进入
docker run -it centos /bin/bash
# 退出容器
exit # 停止容器并退出
Ctrl + P + Q # 不停止 退出
# 删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,-f可以
docker rm -f $(docker ps -ap) # 删除所有容器
docker ps -aq | xargs docker rm # 删除所有容器
# 启动容器
docker start 容器id
docker restart 容器id
# 停止
docker stop 容器id
# 停止
docker kill 容器id 强制
docker 文件拷贝
方法一:
从主机复制到容器
docker cp host_path containerID:container_path
从容器复制到主机
docker cp containerID:container_path host_path
方法二
# 用-v挂载主机数据卷到容器内
docker run -v host_path:container_path $container
# 在容器内拷贝
cp /mnt/sourcefile /path/to/destfile
方法三:用输入输出符
Docker 分层原理
UnionFS 联合文件系统
Docker热挂载
Docker 安装nginx
1、可能遇到的坑
iptables: No chain/target/match by that name.
原因:
如果再启动docker service的时候网关是关闭的,那么docker管理网络的时候就不会操作网关的配置(chain docker),然后网关重新启动了,导致docker network无法对新container进行网络配置,也就是没有网管的操作权限,做重启处理。
解决方法
# 重启
service docker restart
或
systemctl restart docker
使用的centos7服务器,在部署docker的过程中,因端口问题有启停firewalld服务,在centos7里使用firewalld代替了iptables。在启动firewalld之后,iptables还会被使用,属于引用的关系。所以在docker run的时候,iptables list里没有docker chain,重启docker engine服务后会被加入到iptables list里面。(有必要深入研究一下docker network)
另一个解决方法
# 关闭网关
systemctl stop firewalld
systemctl stop iptables
2、安装
docker pull nginx
docker run --name ngnix01 -p 8080:80 -d nginx
配置
linux的/etc目录是存放所有的系统管理所需要的配置文件和子目录
docker 中的ngnix的配置文件放在 /etc/nginx/下
3、注意点
不像windows中的nginx的配置直接放在nginx.conf中,docker中的nginx有关
/
的配置放到了/etc/nginx/conf.d目录下的default.conf中