docker安装及基本命令总结

592 阅读6分钟

docker [系统环境:CentOS7]

一、 安装docker

安装docker

首先更新yum的软件包索引: yum makecache fast

yum安装gcc相关环境: ① yum -y install gcc ② yum -y install gcc-c++

然后进入以下操作

1、卸载旧的docker版本 
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2、安装需要的包
yum install -y yum-utils
3、设置镜像的仓库
yum-config-manager \
    --add-repo \
    [镜像地址]
    //https://download.docker.com/linux/centos/docker-ce.repo   //国外地址
    //http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   //阿里云镜像地址 (推荐)
4、安装docker   docker-ce :社区版     docker-ee :企业版
yum install docker-ce docker-ce-cli containerd.io
5、启动docker
systemctl start docker
6、查看是否安装成功
docker version
7、hello world  (官方镜像测试)
docker run hello-world
8、查看docker下载到本地的镜像
docker images

卸载docker(了解)

  1. yum remove docker-ce docker-ce-cli containerd.io //卸载docker
  2. rm -rf /var/lib/docker //只卸载docker本地的镜像文件不会移除,此命令删除本地所有images、 /var/lib/docker:是docker的默认工作路径

配置使用阿里云镜像服务(记得要root权限)

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://x24bnhrm.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

**二、命令小全

1、系统中的命令

  • 启动docker:systemctl start docker
  • 查看docker运行状态:systemctl status docker
  • 停止docker服务:systemctl stop docker
  • 重启docker:systemctl restart docker
  • 开机自启动docker:systemctl enable docker

2、docker中的命令

2.1、镜像相关
  • 查看docker本身的概要信息(需要先启动docker):docker info
  • 查看本地镜像:docker images
  • 搜索远程镜像:docker search 镜像名称
  • 拉取镜像(默认拉取最新版本,也可加冒号去指定版本):docker pull 镜像名称
  • 删除镜像(前提是对应镜像没有容器或停止容器):docker rmi 镜像id或名称
  • 删除所有镜像(前提是所有镜像都不可以有启动着的容器):docker rmi docker images -q
2.2、容器相关
  • 查看正在运行的容器:docker ps (常用)

  • 查看所有容器:docker ps -a

  • 查看最后一次运行的容器:docker ps -1

  • 查看停止的容器:docker ps -f status=exited

  • 创建容器:docker run

        ·)-i:表示运行容器

        ·)-t:表示容器启动后会进入其命令行

        ·)--name:为创建的容器命名

        ·)-v:表示目录映射关系

        ·)-p:表示端口映射,前者是宿主机端口,后者是容器内端口,可以有多个-p做多端口映射

        ·)-d:表示会创建一个守护式容器在后台运行,也就是后台运行,不进入对应命令行。(与 -t 相反)

  • 交互式方式创建容器(创建并前台运行):docker run -it --name=自定义容器名称 镜像名称:标签 /bin/bash

    • (一旦退出前台,且容器中没有运行中的进程,对应容器也就停止运行)
  • 守护式方式创建容器(创建后台运行):docker run -di --name=自定义容器名称 镜像名称:标签

    • (这种方式容器中没有运行中的进程也会默认停止容器)
  • 进入容器:docker exec -it 容器名称 /bin/bash

  • 停止容器:docker stop 容器名称或id

  • 启动容器:docker start 容器名称或id

  • 文件拷贝:·)将文件拷贝到容器内:docker cp 需要拷贝的文件或目录 容器名称:容器目录

         ·)将文件从容器内拷贝出去:docker cp 容器名称:容器目录 需要拷贝的文件或目录

  • 目录挂载:docker run -di --name=自定义名称 -v 宿主机目录:容器目录 镜像名称:标签

  • 查看容器ip:·)查看容器运行的各种数据:docker inspect 容器名称或id

        ·)只查看容器ip(也就是筛选出自己想要的数据):docker inspect --format='{.NetworkSettings.IPAddress}' 容器名称或id

  • 删除容器(必须先停止容器):docker rm 容器名称或id

3、docker开发环境搭建

  • 创建并启动mysql容器并进行端口映射mysql,远程连接:docker run -di --name=docker_mysql -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=自定义远程连接密码 centos/mysql-57-centos7(镜像名称)
  • 创建并启动tomcat容器,并进行端口以及文件夹映射:docker run -di --name=docker_tomcat -p 8008:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:latest
    • (前面是宿主机的文件夹地址,冒号:后面是docker容器中的文件夹地址(端口同样如此:前宿主后容器))
  • 创建并启动容器,并进行端口映射:docker run -di --name=docker_nginx -p 80:80 镜像名称

4、docker的备份与迁移

  • 将容器保存为镜像①:docker commit 要备份的容器名 备份后的镜像名
  • 将镜像保存为tar文件②:docker save -o 打包成的文件名 备份后的镜像名
  • 镜像的恢复与迁移③:docker load -i tar文件

5、Dockerfile脚本构建

Dockerfile:根据基础镜像(操作系统,或者Dockerfile构建出来的新镜像),创建新的镜像(开发环境,项目等)。

使用Dockerfile脚本创建镜像的好处:

    ·)对于开发人员:可以为开发人员提供一个完全一致的开发环境,避免环境冲突。

    ·)对于测试人员:可以直接拿开发时构建的镜像或者通过原来的Dockerfile文件构建新的镜像开始工作。

    ·)对于运维人员:部署时,可以实现应用的无缝移植。

注意:可以使用vim直接创建Dockerfile,文件名称固定

  • FROM image_name:tag:使用哪个基础镜像启动构建流程 //使用前本地存在,不存在则自动下载
  • MAINTAINER 自定义username:声明镜像的创建者
  • ENV key value:配置环境变量,可以写多条。
  • RUN command:执行某个linux命令,Dockerfile中常用于创建目录,它Dockerfile核心部分,也可以写多条。
  • ADD source_dir/file dest_dir/file:将宿主机的文件复制到容器内,如果只压缩文件,将会在执行时自动解压。
  • COPY source_dir/file dest_dir/file:和ADD差不多,只是说有压缩文件时不会自动解压。
  • WORKDIR path_dir:设置工作目录。(基于哪个目录去工作)。

栗子:以构建jdk1.8镜像为例:首先所在文件夹中存在jdk1.8的压缩包,然后使用vim在Dockerfile中编辑以下内容,以下除RUN命令下以外,其他所有文件和文件夹必须已经存在,。

FROM centos:latest
MAINTAINER myzyt
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
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' . //其中'jdk1.8'表示新镜像名称, . 表示当前目录,用于指定Dockerfile文件所在文件夹。

6、docker私有仓库(registry)的配置(上传到远程仓库需要先注册dockerhub账号 hub.docker.com/signup)

  • 登录:docker login -u username

    直接回车下边会让输入密码,类似于MySQL服务的命令行登录

  • 拉取镜像:docker pull registry

  • 创建私有仓库容器:docker run -di --name=registry -p 5000:5000 registry

  • 编辑daemon.json文件,使docker信任私有仓库地址:vi /etc/docker/daemon.json

      ·)json中添加内容:"insecure-registries":["ip:5000"]

  • 重启docker服务:systemctl restart docker

  • 将镜像上传到私有仓库:

      ·)第一步:打标签,为上传做准备:docker tag jdk1.8 ip:5000/jdk1.8

      ·)第二步:启动docker私服:docker start registry

      ·)第三步:上传镜像:docker push ip:5000/jdk1.8