0%

docker 的常用命令

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

如何修改容器的端口映射?

  1. 一定要 service docker stop(cerntos 用systemctl stop docker),不然会被覆盖
  2. 改文件
    每个对应容器都有 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"})

  1. 启动容器
    systemctl start docker
    docker ps -a
    docker start postgres

如何把宿主的目录挂载到 docker 容器中

使用 docker 中的
docker run -v /path2src:/path2docker …
对应的在 config 中应该也找得到配置项