docker 基本命令
- 搜索可用镜像 xx-name是镜像名称
docker search xx-name
- 下载容器镜像
docker pull xx-name
- 查看所有正在运行中的容器列表
docker ps
或者docker container ls
- 查看更详细的关于某一个容器的信息 xx-id 容器id
docker inspect xx-id
- 列出所有安装过的镜像
docker images
或者docker image ls
- 将某一个镜像发布到官方网站
docker push xx-name
- 查看docker信息
docker version
- 删除镜像
docker image rm xx-name
- 如果删除失败:
Error response from daemon: conflict: unable to delete 72300a873c2c (must be forced) - image is referenced in multiple repositories
可以尝试下面的:docker rmi -f xx-id
docker 常用命令
- 运行容器
docker run -p 80:80 -v /vdc:/vdc --name slave01 -it centos-pmr:latest /bin/bash
- 删除容器
docker rm xx-id
- 退出容器
exit
- 进入容器
- 开启容器
docker start xx-id
- 进入容器
docker exec -it xx-id /bin/bash
- 根据基本镜像,安装一些内容后,生成新的镜像
- centos清楚下载的缓存,这样打包的新镜像会小些
yum clean all
- 然后commit
docker commit xx-id xx-newname
docker 常见问题
- 错误:
docker: Error response from daemon: driver failed programming external connectivity on endpoint slave01 (ebaecd818079884d9384c0edfea7a7a35e12f59dd09650577637d1bc65ebf39a): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8090 -j DNAT --to-destination 172.17.0.3:8090 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)). ERRO[0000] error waiting for container: context canceled
解决办法:首先 查看容器的状态docker ps -a
,然后重启dockersystemctl restart docker
,然后尝试docker start xx-id
没有使用dockerfile,想启动的时候开启某些进程
百分九十碰到执行docker run -it -p 8093:6800 --name=slave04 base:01 /bin/bash /vdc/start.sh
类似的代码,发现容器根本没有起来,是exit状态,docker start
都不行
- 原因:因为docker机制原因,如果进程为1的进程死掉了,那么docker就会认为此容器没有用了,所有要保证进程1一直是活的状态,上面进程为1的就是我的start.sh脚本
- 解决办法: 在start.sh 脚本最后加上
tail -f /dev/null
- 最后:想开多个进程都可以写到脚本中,在run的时候启动
提交镜像到hub上
假如我hub镜像仓库为 12345678/spider
docker login
然后根据提示输入hub账号密码docker tag 镜像名字及tag 12345678/spider
这里一般会在spider后面加上自定义的tag,我没有写,所以会有默认的latestdocker push 12345678/spider:latest
因为第二步我没有写tag,所以我提交的时候,用的是默认的latest,写的就换成自己写的tag
- 最后,在另一台机器上可以使用
docker pull 1045985049/spider_slave:latest
拉取镜像