您的当前位置:首页正文

docker快速上手

来源:华拓网

docker安装

容器相关命令

  • docker启动、重启、关闭
sudo docker start | restart | stop
  • 查看docker程序是否正常工作
sudo docker info
  • 创建一个交互式shell容器,并为容器命名,名字可以包含字符:a-z,A-Z,0-9,下划线,圆点,横线。用正则表示[a-zA-Z0-9_.-]
sudo docker run --name first_container -it ubuntu /bin/bash
  • 查看当前系统中的容器列表
docker ps -a
docker ps -a -l #列出最后一次运行的容器
  • 重新启动已经停止的容器
sudo docker start first_container
sudo docker start container_id #也可以用从其id启动
sudo docker start container_name #重新启动一个容器
  • 创建守护式容器,使用-d参数,docker容器会在后台运行
sudo docker run --name container_name -d ubuntu /bin/bash
  • 停止守护进程
sudo docker stop container_name
  • 获取守护式容器日志
sudo docker logs container_name
sudo docker logs -f container_name #监控docker日志
sudo docker logs --tail 10 container_name #获取日志最后10行
sudo docker logs --tail 0 -f container_name #跟踪某个容器的最新日志而不必读取日志文件
sudo docker logs -ft container_name #-t标志为每条日志加上时间戳,方便调试
  • 查看容器内的进程
sudo docker top container_name
  • 自动重启容器
sudo cocker run --restart=always --name container_name -d ubutu

--restart:always,on-failure
--restat=on-failure:5,自动尝试重启五次

  • 查看容器
sudo docker inspect container_name

docker inspect命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置的数据,也可以用-f或者--format标志来选定查看结果。

sudo docker inspect --format='{{.State.Running}}' container_name
#查看多个容器
sudo docker inspect --format='{{.Name}} {{.State.Running}}' container_name_1 container_name_2

/var/lib/docker目录存放着docker镜像、容器以及容器的配置,所有的容器都保存在/var/lib/docker/containers目录下

  • 删除容器
sudo docker rm container_name | container_id

运行的docker容器是无法删除的,必须先通过docker stop或者docker kill命令停止容器,才能删除。

  • 删除全部容器(-a标志代表列出所有容器,-q表示只需要返回容器的ID。)
sudo docker rm `docker ps -a -q`

镜像相关命令

  • 列出docker镜像
sudo docker images

本地镜像都保存在dockers宿主机的/var/lib/docker目录下。镜像从仓库下载,镜像保存在仓库中,而仓库存在于Registry中,默认的Registry是由Docker公司运营的公共Registry服务,及Docker Hub

  • 拉取ubuntu镜像
docker pull ubuntu #拉取镜像
docker pull ubuntu:14.04 #拉去tag为14.04的镜像

指定仓库的标签是一个好习惯,这样可以准确的制定容器来源于哪里。
Docker Hub有两种仓库:用户仓库和顶层仓库,用户仓库的镜像由Docker用户创建,顶层仓库由Docker内部人来管理。

  • 查看镜像
sudo docker images container_name
  • 查找镜像
sudo docker search container_name
  • 构建镜像
    1. 创建Docker Hub账号
    2. 登陆Docker Hub
    sudo docker login
    
    1. 用docker的commit命令创建镜像
      基于ubuntu镜像创建一个新镜像
    #创建一个要进行修改的定制容器
    sudo docker run -i -t ubuntu /bin/bash
    #安装apache软件包
    apt-get -yqq update
    apt-get -y install apache2
    #退出当前容器
    #提交定制容器
    sudo docker commit 4aab3ce3cb86 jamtur01/appache2
    #检查新创建的镜像
    sudo docker images jamtur01/apache2
    #在提交镜像时指定更多的数据(包括标签)来详细描述所做的修改
    sudo docker commit -m="A new custom image" --author="James Turnbull" 4aab3ce3cb76 jamtur01/apache2:webserver
    #使用docker inspect查看新创建的镜像详细信息
    sudo docker inspect jamtur01/apache2:webserver
    #从提交的镜像运行一个新容器
    sudo docker run -t -i jamtur01/apache2:webserver /bin/bash
    
  • 用dockerfile构建镜像
    并不推荐使用docker commit的方法来构建镜像,相反推荐使用Dockerfile的定义文件和docker build命令来构建镜像。Dockerfile使用基于DLS语法的指令来构建一个Docker镜像,之后使用docker build命令基于该dockerfile中的指令构建一个新的镜像。步骤:(我们将创建一个包含简单web服务器的docker镜像)
    1. 创建一个目录并在里面创建初始化的Dockerfile
    mkdir static_web
    cd static_web
    touch Dockerfile
    
    1. dockerfile文件内容
    #第一个Dockerfile
    #Version:0.0.1
    FROM ubuntu:14.04
    MAINTAINER James Turnbull 
    RUN apt-get update
    RUN apt-get install -y nginx
    RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
    expose 80
    
    1. dockerfile指令解释
      Docker大体按照如下流程执行Dockerfile中的指令
      • Docker从基础镜像运行一个容器。
      • 执行一条指令,对容器做出修改。
      • 执行类似docker commit的操作,提交一个新的镜像层。
      • Docker在基于刚提交的镜像运行一个新容器。
      • 执行Dockerfile中的下一条指令,直到所有指令都执行完毕。
    2. 基于dockerfile镜像构建新镜像
      执行docker build命令时,dockerfile中的指令都会被执行并且被提交,并且在该命令成功结束后返回一个新镜像。
    #运行Dockerfile
    cd static_web
    sudo docker build  -t="jamtur01/static_web" .
    
    使用docker build命令来构建新镜像,通过-t为新镜像设置了仓库和名称。在本例仓库为jamtur01,镜像名为static_web。建议为自己的镜像设置合适的名字以方便追踪和管理。也可以设置标签,如:
    sudo docker build -t="jamtur01/static_web:v1" .
    
      上面告诉docker到本地目录中去找Dockerfile文件,也可以指定一个Git仓库的源地址来指定Dockerfile的位置。
    
    sudo docker build -t="jamtur01/static_web:v1 
    
  • 忽略dockerfile的构建缓存
sudo docker build --no-cache -t="jamtur01/static_web"
  • 查看新镜像
sudo docker images jamtur01/static_web
  • 查看镜像如何构建出来的
sudo docker history22d47c8cb3jkk
  • 从新镜像启动一个容器
sudo docker run -d -p 80 --name static_web jamtur01/static_web nginx -g "daemon off;"

-d:说明在后台运行
-p:控制docker在运行时应该公开哪些网络端口给宿主机,-p还可以灵活的管理容器和宿主机之间的端口映射关系

sudo docker run -d -p 80:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
sudo docker run -d -p 8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
#端口限制在特定的IP上
sudo docker run -d -p 127.0.0.1:8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"

-P:可以用来对外公开在Dockerfile中EXPOSE指令中设置的所有端口

sudo docker run -d -P --name static_web jamtur01/static_web nginx -g "daemon off;"

运行一个容器时,Docker可以通过两种方法来在宿主机上分配端口。
* Docker可以在宿主机上随机选择一个位于49153~65535的一个比较大的端口好来映射到容器中的80端口上。
* 可以在Docker宿主机中指定一个具体的端口好来映射到容器中的80端口上。

  • 查看docker端口映射情况
sudo docker ps -l
##指定要查看映射情况的容器ID和容器的端口号
sudo docker port container_id 80