docker 的常用命令
镜像相关
拉取一个镜像
docker pull image_name
发布一个镜像(注意别发布到 docker push 上去了)
docker push
查看已有镜像
docker images
等价于:docker image ls
搜索镜像列表
docker search nginx
可以在dockerHub 官网进行搜索,细化到各个镜像的版本号。
导出、导入镜像为文件(镜像打包到文件、文件恢复为镜像)
docker save -o image_name.tar
docker save -o /home/skj.tar skj:latest
导入方法一:
docker load –input /home/skj.tar
导入方法二
docker load -i /home/skj.tar
导入方法三
docker load < /home/skj.tar
删除镜像(有容器使用是删不掉的)
1 | docker rmi image_name |
注意:如果删除比较大的镜像,docker rmi后,镜像所占用的磁盘空间会立极恢复,不用担心占用磁盘。
从容器导出为镜像
docker commit -m “con_name” con_id image_name
或者导出容器为镜像:
docker commit ef5db5c6693b skj:latest
容器相关
查看正在运行的容器
docker ps (-a) # -a 所有
创建 docker 容器
docker create -it –name nginx_docker nginx # 使用 image 名创建
docker create -it –name nginx_docker 27a188018e18 bash # 使用 image 的 id 创建
启动一个 docker 容器
docker start 启动一个已停止的容器
docker start -i nginx_docker # name 启动
docker start -i 27a188018e18 # id 启动
docker run hello-world(image-name)
docker run 命令是 create 和 start 的结合
docker run –name=con_name images
让容器使用系统时区:-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro
让容器跟随宿主机系统的重启而重启:在 docker run 的时候加上这个参数:--restart=always
如果容器启动时没有设置–restart 参数,则通过下面命令进行更新:
1 | docker update --restart=always [容器名] |
停止、重启容器
docker stop
停止的容易可以通过 docker restart 重启:
docker restart
删除容器
docker rm con_name
docker rm -f con_name (强制删除容器,若不加-f,则无法删除正在运行的容器)
拷贝文件
docker cp one.file ng:/
docker cp ng:/one.file .
物理机端口映射到虚拟机 81 上
docker run -d -p 80:81 image_name # -d 表示守护进程
查看 docker 的端口映射
docker port con_id
进入容器,相当于使用 chroot
docker attach con_name (退出 exit)
docker attach 进入容器正在执行的终端,不会启动新的进程。如果使用 exit 退出,容器会停止运行!如果想退出容器但不想容器停止,则按住 Ctrl+P+Q 退出
进入容器
docker exec nginx_docker
docker exec -it nginx_docker bash
docker exec 相当于进入容器并开启一个新的终端,可以在里面操作。如果使用 exit 退出,容器也不会停止。
动态查看容器日志
docker logs -f con_name
docker logs nginx -ft –since 1m # -t 表示显示时间戳,since 表示多久之前开始显示
查看容器 PID
docker top con_name
查看 docker 网络情况
docker network ls
还可以用 docker 创建网段路由等,详情 google
docker -it # 实现交互式容器
docker -d # debug 模式
查看 docker 容器信息
docker inspect nginx_docker
查看 docker 容器分配到的 ip
docker inspect nginx_docker | grep IPAddress
默认是 172.17 的网段 ip
如何修改容器的端口映射?
- 一定要 service docker stop(cerntos 用
systemctl stop docker),不然会被覆盖 - 改文件
每个对应容器都有 config,改了就可以了
端口对应的 config 的两个文件是:
/var/lib/docker/containers/con_id/hostconfig.json
/var/lib/docker/containers/con_id/config.v2.json
测试中只需要改第一个就好了,可能跟版本有关系
修改(注:ExposedPorts 是暴露的接口)(需要在防火墙中放开相应端口的权限):
“PortBindings”:{“8080/tcp”:[{“HostIp”:””,”HostPort”:”60000”}]}
“Ports”:{“8080/tcp”:{“HostIp”:””,”HostPort”:”60000”}} (config.v2.json 文件,这里如果 stop 了之后是空的{},也需要填上{"HostIp":"","HostPort":"60000"})
- 启动容器
systemctl start docker
docker ps -a
docker start postgres
如何把宿主的目录挂载到 docker 容器中
使用 docker 中的
docker run -v /path2src:/path2docker …
对应的在 config 中应该也找得到配置项