docker安装及常用命令

docker安装及常用命令

安装

# yum包更新到最新
sudo yum update
# 安装需要的软件包
sudo yum install -y yum-utils device-mapper-oersistent-data lvm2
#设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyu.com/docker-ce/limux/centos/docker-ce.repo
#安装docker
sudo yum install docker-ce
#安装后查看docker版本
docker -v

设置ustc镜像

vi /etc/docker/daemon.json

在该文件下输入如下内容
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

查看安装好的docker
启动,停止,重启,状态
systemctl start(stop restart, status) dcoker

开机启动
systemctl enable docker
查看docker概要信息
docker info
docker帮助
docker --help

常用命令

镜像相关
  • 查看镜像 docker images
  • 搜索镜像 docker search 镜像名字
  • 拉取镜像 docker pull 镜像名字:tag名称
  • 删除镜像 docker rmi 镜像ID/名称
  • 删除所有镜像 docker rmi docker images -q
容器相关
  • 查看正在运行的容器 docker ps

  • 查看所有容器 docker ps -a

  • 创建容器:docker run

    • -i : 表示运行容器

    • -t :容器启动后会进入其命令行,

    • –name :为创建的容器命名

    • -v : 表示目录映射关系(前者是宿主机的目录,后者是映射到宿主机的目录)可以使用多个-v映射

    • -d :创建一个守护式容器在后台运行

    • -p :表示端口映射,前者是宿主机,后面是容器的映射端口。可以使用多个-p映射

    • 例子:

      • #交互式创建容器
        docker run -it --name=容器名称 镜像名称:标签 /bin/bash
        
      • #守护式创建容器
         docker run -di --name=容器名称 镜像名称:标签
        #exit 不会退出来
        
    • 进入容器

      • docker exec -it 容器名称 /bin/bash
        
  • 停止容器 docker stop 容器ID/容器名称

  • 启动容器 docker start 容器ID/容器名称

  • 文件拷贝

    • #把文件拷贝到容器
      
      docker cp 需要拷贝的文件或者目录 容器名称:容器目录
      
    • #把文件从容器拷贝到宿主机
      
      docker cp 容器名称:容器目录 需要拷贝的文件或者目录
      
  • 目录挂载:在创建容器的时候添加-v参数 后面为 宿主机目录:容器目录

    • docker run -di -v /usr/lcoal/mythml:usr/local/mythml --name=容器名称 镜像名称:标签
      
  • 查看容器IP

    • # NerworkSetting.IPAddress的值就是
      
      docker inspect 容器名称
      
      #只显示IP
      
      docker inspect --format='{{.NerworkSetting.IPAddress}}' 容器名称
      
  • 删除容器:docker rm 容器名称

  • -------------------------------------------------------注意--------------------------------------------------------------------------------

    • 容器需要先启动才可以用 docker exec -it 容器名称 /bin/bash 进入

    • docker run -it --name=容器名称 镜像名称:标签 /bin/bash 
      
      1.这是创建并启动容器了
      2./bin/bash 是交互的位置
      3.exit的时候就退出来了
      
    • docker run -di --name=容器名称 镜像名称:标签
      
      1,这个刚创建好后,也是就启动了,在用docker exec进入后,再用exit退出,容器不会关闭
      2,用docker stop后 可以关闭这个容器
      
    • 用docker start启动的容器,不管之前使用什么方式创建的容器,在容器中执行 exit 都不会使容器关闭

    • docker stop 可以关闭任何方式创建的容器。

  • ---------------------------------------------------------------------------------------------------------------------------------------------

应用部署

1. mysql部署
  • 拉取

  • 创建容器

    • docker run -di --name=容器名称 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=123456 镜像名称
      
      -e 是指定环境变量
      
2. tomcat部署
  • 拉取
  • 创建容器 (注意:端口映射 目录挂载)
3.nginx 部署
  • 拉取
  • 创建容器

备份与迁移

  • 容器保存为镜像

    • docker commit 容器名称 要保存的新的镜像名称
      
  • 镜像备份

    • docker save -o 文件名(mynginx.tar) 镜像名称
      #或者
      docker save < 文件名(mynginx.tar) 镜像名称
      
  • 镜像恢复

    • docker load -i xxxx.tar
      #或者
      docker load < xxxx.tar
      
  • 容器可以直接导出导入

    • # docker export 导出容器到文件
      docker export -o xxx.tar 容器名称
      
      # docker import 导入容器文件至本地镜像库
      docker import nginx-test.tar nginx:imp
      # 或
      cat nginx-test.tar | docker import - nginx:imp
      
  • 区别(export 和 save,load 和 import)

    • ##1)export导出的tar文件是略小于save导出的tar文件
      ##2)export从容器container中导出tar文件,save从镜像image中导出
      ##3)export导出的文件再import回去时,无法保留镜像所有历史,不能进行回滚操作;而save是根据镜像来的,所以导入时可以保存每一层layer信息
      
      ##建议##
      ##1)若只想备份image,使用save、load即可
      ##2)若容器启动后内容有变化需要备份,则使用export、import
      

Dockerfile

常用命令
  • FROM image_name:tag 定义使用哪个基础镜像启动构建流程
  • MAINTAINER user_name 声明镜像的创建者
  • ENV key value 设置环境变量 (可以些多条)
  • RUN command 是Dockerfile的核心部分(可以写多条)
  • ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器中,若是一个压缩文件,复制后会自动解压
  • COPY source_dir/file dest_dir/file 仅复制不能解压
  • WORKDIR path_dir 设置工作目录
例子:Dockerfile构建jdk1.8镜像
  • 创建文件夹 mkdir -p /usr/local/dockerjdk8

  • 在这个文件夹下创建文件,Dockerfile

  • 编写dockerfile文件

    • FROM centos:7
      MAINTAINER rx
      WORKDIR /usr
      RUN mkdir /usr/local/java
      ADD jdk-8u271-linux-x64.tar.gz /usr/local/java/
      
      ENV JAVA_HOME = /usr/local/java/jdk1.8.0_271
      ENV JRE_HOME $JAVA_HOME/jre
      ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
      ENV PATH $JAVA_HOME/bin:$PATH
      
  • 构建

  • docker build -t ='jdk1.8'(镜像名称) .(dockerfile文件所在的文件夹)
    

Docker 私有仓库

  • 拉取 docker pull registry

  • 启动私有仓库

    • docker run -di --name=registry -p 5000:5000 registry
      
  • 启动之后在 http://宿主机IP:5000/v2/_catalog 可以访问到: repositories []

  • 修改/etc/docker/daemon.json

    • 添加
      "insecure-registries":["ip:port"]
      
  • 把镜像上传到私有仓库

    • 打标签
      docker tag jdk1.8 ip:port/jdk1.8
      
    • 推上去
      dcoker push ip:port/jdk1.8
      
    • 拉取 ip为私服地址,需要修改daemon.json 使其信任这个地址。修改如上。 
      docker pull ip:port/jdk1.8
      

其他

  • 重启 docker。 systemctl restart docker.service

  • 查看日志 docker logs

    • $ docker logs [OPTIONS] CONTAINER
        Options:
              --details        显示更多的信息
          -f, --follow         跟踪实时日志
              --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
              --tail string    从日志末尾显示多少行日志, 默认是all
          -t, --timestamps     显示时间戳
              --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
              
       ## 查看指定时间后的日志,只显示最后100行:
       ## docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
      

你可能感兴趣的:(docker)