环境: Centos 7
一、Docker安装
- 开启linux内核的流量转发
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
- 加载修改内核参数
sysctl -p /etc/sysctl.d/docker.conf
如果有报错执行:modprobe br_netfilter
- 提前配置好yum仓库
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all && yum makecache
- yum安装
查看可用版本:yum list docker-ce --showduplicates | sort -r
yum install docker-ce-20.10.6 -y
卸载:yum remove docker-ce-20.10.6
docker -v 查看是否安装成功
- 镜像加速器
mkdir -p /etc/docker
touch /etc/docker/daemon.json
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
]
}
也可以添加阿里云镜像源 ,参考:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
国内能用的docker镜像源:https://blog.youkuaiyun.com/u014390502/article/details/143472743
- 启动docker
systemctl enable docker 设置开机自启
# 修改镜像加速源之后要执行下面这两操作
systemctl daemon-reload 重新读配置文件
systemctl restart docker 启动docker
二、使用Docker-安装Nginx
- 查找镜像
docker search nginx
- 下载镜像
docker pull nginx
docker pull nginx:版本号
这里一直报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)但是已经配置了镜像源,先用 docker pull daocloud.io/library/nginx 指定镜像源获取了nginx,后来又可以了,应该是网络问题
- 运行容器
docker run -d -p 80:80 nginx
-d 后台运行
-p 端口映射
nginx 镜像名
- 在浏览器输入IP:端口,既看到Nginx界面
三、Docker常用命令
镜像操作
查找镜像:docker search 镜像名:tag
查看本地镜像源:docker images / docker image ls
下载镜像:docker pull redis
删除镜像:docker rmi 镜像ID
删除所有未开启容器镜像:docker rmi (docker images q)
查看镜像详细信息:docker image inspect 镜像ID
查看Docker镜像存储信息:docker info / docker info | grep Root
输出镜像位置 : Docker Root Dir: /var/lib/docker (/var/lib/docker/image/overlay2/imagedb/content/sha256)
格式化查看镜像:docker images --format "{{.ID}}:{{.Repository}}"
表格格式 :docker images --format "table{{.ID}}\t{{.Repository}}\t{{.Tag}}"
导出镜像:docker image save nginx -o nginx.tar.gz(或者 tgz格式)
导入镜像:docker image load -i nginx.tgz
PS:导出时候尽量用名称和版本号,不要用id。用id重新导入后不显示镜像名和版本号
上传镜像到doker.hub 例子:拉取debian镜像装好nginx再打包上传
1.拉取镜像:docker pull debian:latest
2.进入容器:docker exec -it 容器id /bin/bash
3.安装nginx:
更新apt缓存:apt update
安装nginx:apt install nginx -y
查看nginx版本:nginx -v
启动nginx:nginx
退出:exit
4.停止容器(打包前做好停止):docker stop 容器id
5.打包上传:docker commit 容器id username/new_nginx:v1
根据名字或者id都可以提交,后面加个镜像名称和版本,username是docker仓库用户名
6.登录官方仓库:docker login
7.改名(如果名称不冲突就不用改名字):docker tag new_nginx:v2 username/new_new_nginx:v2
8.推送:docker push 容器名
容器操作
使用镜像生成容器:docker run
-d:放后台运行
-p:端口映射 #例子: -p 宿主机端口:容器端口
--name:指定容器的名字 ,docker run -it --name new_nginx 镜像id或者名称
--link:关联另一个容器(了解)
-e:MYSQL_ROOT_PASSWORD,设置容器的一些属性(了解)
-it:给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了
--rm:容器退出时,删除该容器
--restart=always:重启docker(systemctl restart docker)服务会自动关闭所有的容器,加上--restart=always,那么重启之后,容器会自动启动
显示up状态的容器 -a 查看所有容器:docker ps
启动容器:docker start 容器Id
重启容器:docker restart 容器Id
停止容器:docker stop
删除容器:docker rm 容器Id(同时删除多个,就空格隔开)
删除所有容器:docker rm -f `docker ps -a -q`
查看容器内的进程:docker top
查看容器的资源占用情况:docker stats
进入容器,且在容器内执行一个命令:docker run -it centos:7.8.2003 sh/bash
查看所有日志:docker logs 容器id
刷新查看日志:docker logs -f 容器id
查看最新5条日志:docker logs | tail -5
进入容器空间内:docker exec -it 容器id bash
查看容器详细信息:docker container inspect 容器id
容器的端口映射:docker run -d --name my_nginx -p 85:80 nginx (宿主机85访问容器内80端口)
查看容器端口转发情况:docker port 容器id
docker的端口映射情况:netstat -lntup
随机端口映射:docker run -d --name my_nginx -P nginx(宿主机空闲端口 映射容器80端口)
容器的提交
例子:在容器内安装vim 然后提交新的镜像
运行容器:docker run -it centos:7.8.2003 bash
进入容器:docker exec -it 容器id bash
安装vim :yum install vim -y ,退出容器
提交容器:docker commit 容器id 新的镜像名
基于此镜像运行的容器 就携带了vim