2019年7月17日

Docker 简单使用

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

docker 常用命令

搜索镜像

# 搜索 centos 镜像
docker search [options](centos)

拉取镜像

docker pull [options](centos)

后台启动镜像

docker run -dit --name zifeng -p 8080:80 centos
# 常用参数说明
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="zifeng": 为容器指定一个名称;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--volume , -v:  绑定一个卷
--privileged=true 使用该参数,container内的root拥有真正的root权限。
--restart=always 运行了一个restart策略为的容器,以使得容器退出时,docker将重启它。

查看所有镜像

docker images

查看所有容器及后台运行容器

docker ps -a
docker ps

## 删除容器或镜像

必须删除所有容器才能删除镜像,否则会报错

#删除容器
docker rm [options]
# 删除所有容器
docker rm $(docker ps -a -q)
#删除镜像
docker rmi [options]
# 删除所有镜像
docker rmi $(docker images -q)

查看容器日志

# 命令格式
docker logs [OPTIONS] CONTAINER
# 参数说明
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志

容器与主机数据拷贝

# 主机文件拷贝进指定容器
docker cp /root/test.txt ecef8319d2c8:/root/
# 容器文件拷贝到主机
docker cp ecef8319d2c8:/root/test.txt /root/

进入容器内部

docker exec -it zifeng /bin/bash

将容器打包成镜像

docker commit afcaf46e8305 centos-vim
# 使用情况:在一个新生成的容器里面安装了其他软件或python包,使用该命令可以在其基础上生成一个新的镜像

docker 跨服务器迁移

有时候我们需要在多台服务器上面部署相关的服务,这个时候就需要使用到如下操作。

# 导出镜像
docker save image1 images2 -o image.tar.gz
# 导入镜像
docker load -i image.tar.gz

# 导出容器
docker export -o container_id container.tar.gz
# 导入容器为镜像
docker import container.tar.gz images:latest

区别如下:
1. docker save保存的是镜像(image),docker export保存的是容器(container);
2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

docker 的网络模式

有时候我们需要 docker container之间互相访问端口上的服务或者 container 访问宿主机端口上的服务,这个时候不同的网络模式就会有不同的作用。

正常情况下启动容器的时候指定 -p(端口映射) 参数就可以使用。但是有有时候会有特殊情况,一般指定 –net=host 参数也可以搞定,有时候这两种情况都不能使用,这时候就要涉及到 docker 的网络模式了。

  • host模式,使用–net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
  • container模式,使用–net=container:NAME_or_ID指定,创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
  • none模式,使用–net=none指定,该模式关闭了容器的网络功能。
  • bridge模式,使用–net=bridge指定,默认设置,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

如果容器之间互相调用端口上的服务,启动的时候直接指定–net=container:NAME_or_ID 就可以了

1 Response

  1. Owen说道:

    Hi, very nice website, cheers!
    ——————————————————
    Need cheap and reliable hosting? Our shared plans start at $10 for an year and VPS plans for $6/Mo.
    ——————————————————
    Check here: https://www.good-webhosting.com/

发表评论

电子邮件地址不会被公开。 必填项已用*标注