docker常用命令问题汇总
Docker简介
docker可以用来创建虚拟环境跑应用,各个应用能起到隔离作用。
使用方法也很简单,就是获取镜像,使用镜像,配置镜像,对应的应用就能快速跑起来了
以httpd为例
1.搜索镜像 docker search httpd
2.获取镜像 docker pull httpd
3.运行镜像 docker run --name httpdtest -p 80:80 httpd #--name起名字方便识别。-p 80:80 容器端口:宿主机映射端口,可选。
4.容器状态 docker ps(运行中的容器)或docker ps -a(所有状态的容器)
5.进入容器 docker exec -it 容器id bash #通过bash进入容器,容器id可通过docker ps获取
6.删除镜像 docker rmi 镜像id
7.重启容器 docker restart 容器id
8.文件复制 docker cp 容器id:/容器文件目录 /宿主机目录 #将容器内部的文件复制到宿主机目录下
docker cp /宿主机目录 容器id:/容器文件目录 #将宿主机目录内容复制到容器内部目录
9.系统镜像 docker run -d -it --name centos7 centos /bin/bash #运行centos镜像,-d后台运行,-it互动终端方式,/bin/bash启动bash否则会自动终止该centos容器
10.指定版本 docker pull centos:7 #可以通过:后指定版本,例如默认centos的版本为8,我们可以这样指定为7的版本
11.容器文件持久化
容器有一个比较麻烦的地方,就是每次重启之后会导致容器内的文件重置为初始化状态。所以我们还需要对容器内的文件进行持久化配置
持久化配置有两种方法
方法一:直接复制。如docker cp 容器id:/etc/prometheus /zhao #将容器内部的文件复制到宿主机的/zhao文件夹下
方法二:docker run --name myprometheus -v /zhao/prometheus:/etc/prometheus -d 镜像id #其中-v是指映射逻辑卷的意思,将宿主机上的/zhao/prometheus里的文件和文件夹复制到容器的/etc/prometheus里。-d是指后台运行
问题汇总:
1.问题描述:容器已启动,但是docker ps没有显示
解决方法:docker ps -a查看全部docker应用
补充说明:如有运行异常的,使用stop是停止不了的,需要使用docker rm 加上containerID才行。这个rm我还不确定,建议谨慎操作
2.问题描述:提示httpd: Could not reliably determine the server's fully qualified domain name
解决方法:find / -name httpd.conf然后查找ServerName,把改参数值改为 localhost:80,然后重启docker的httpd
补充说明;注意端口不要被占用了
3.问题描述:编辑文件时,发现没有vim命令,也无法yum安装,因为yum命令也没有。
解决方法:(并不是通用的,只是部分容器可行):
进入容器内部,执行以下命令:
apt-get update
apt-get install vim
4.问题描述:容器开启后,外部无法正常访问服务,但是宿主机测试该服务是正常的
可能原因:Linux内核限制了网络转发导致
解决方法:sysctl -w net.ipv4.ip_forward=1 #允许ipv4转发