docker

160 阅读5分钟

docker

1. 安装Docker

1.1 安装

  • yum包更新到最新

    sudo yum update

  • 安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  • 设置yum源为阿里云

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 安装docker

    sudo yum install docker-ce

  • 安装后查看docker版本

    docker -v

1.2 设置ustc的镜像

  • 编辑文件

    vi /etc/docker/daemon.json

    {

    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

    }

1.3 Docker的启动与停止

  • 启动

    systemctl start docker

  • 停止

    systemctl stop docker

  • 重启

    systemctl restart docker

  • 查看状态

    systemctl status docker

  • 开机启动

    systemctl enable docker

  • 查看docker概要信息

    docker info

  • 查看docker帮助文档

    docker --help

2. 常用命令

2.1 镜像相关命令

2.1.1 查看镜像

docker images

2.1.2 搜索镜像

docker search 镜像名称

2.1.3 拉取镜像

docker pull 镜像名称

2.1.4 删除镜像

docker rmi 镜像ID

docker rmi 'docker images -q' 删除所有镜像

2.2 容器相关命令

2.2.1 查看容器

docker ps 查看正在运行的容器

docker ps -a 查看所有容器

docker ps -l 查看最后一次运行的容器

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

2.2.2 创建与启动容器

  • 创建容器常用的参数说明:

  • 创建容器命令:

    docker run

    -i 表示运行容器

    -t 表示容器启动后会进入其命令行,加入这两个参数后,容器创建就能登录进去,即分配一个伪终端

    -name 为创建的容器命名

    -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上

    -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后会自动进入容器)

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

  • 交互式方式创建容器

    docker run -it --name=容器名称 镜像名称:标签 /bin/bash

    退出当前容器 — exit

  • 守护式方式创建容器

    docker run -di --name=容器名称 镜像名称:标签

    登录守护式容器方式:

    docker exec -it 容器名称(或者容器ID) /bin/bash

2.2.3 停止与启动容器

  • 停止容器

    docker stop 容器名称(或者容器ID)

  • 启动容器

    docker start 容器名称(或者容器ID)

2.2.4 文件拷贝

  • 如果我们需要将文件拷贝到容器内可以使用cp命令

    docker cp 需要拷贝的文件或目录 容器名称:容器目录

  • 也可以将文件从容器内拷贝出来

    docker cp 容器名称:容器目录 需要拷贝的文件或目录

2.2.5 目录挂载

  • 在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器

  • 创建容器 添加-v参数 后边为宿主机目录:容器目录

    docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

  • 如果共享的是多级目录,可能出现权限不足的提示,因为centos7中的安全模块selinux把权限禁掉了,需要添加参数 —pricileged = true来解决挂载的目录没有权限的问题

2.2.6 查看容器ip地址

  • 查看容器运行的各种数据

    docker inspect 容器名称(容器ID)

  • 可以直接执行下面的命令直接输出IP地址

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

2.2.7 删除容器

  • 删除指定容器

    docker rm 容器名称(容器ID)

3. 应用部署

3.1 MySQL部署

  • 拉取镜像

    docker pull centos/mysql-57-centos7

  • 创建容器

    docker run -di --name=别名 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

  • 进入容器

    docker exec -it 别名 /bin/bash

  • 登录

    mysql -u root -p

  • 远程登录

3.2 Tomcat部署

  • 拉取镜像

    docker pull tomcat:7-jre7

  • 创建容器

    docker run -di --name=别名 -p 9000:9000 -v /usr/local/webapps:/usr/local/webapps tomcat:7-jre7

3.3 nginx部署

  • 拉取镜像

    docker pull nginx

  • 创建容器

    docker run -di --name=别名 -p 80:80 nginx

3.4 redis部署

  • 拉取镜像

    docker pull redis

  • 创建容器

    docker run -di --name=别名 -p 6379:6379 redis

4. 迁移与备份

4.1 容器保存为镜像

docker commit 容器名称 容器镜像名称

4.2 镜像备份

docker save -0 容器名称.tar 容器名称

4.3 镜像恢复与迁移

docker load -i 镜像备份(例如:mynginx.tar)

5. Dockerfile

5.1 Dockerfile是一系列命令和参数构成的脚本

5.2 常用命令

  • 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

    和ADD相似,但是如果有压缩文件并不能解压

  • WORKDIR path_dir

    设置工作目录

5.3 使用脚本创建镜像

MAINTAINER kwan

WORKDIR /usr

RUN mkdir /usr/local/java

ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME=/usr/local/java/jdk1.8.0_144

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' .

6. Docker私有仓库

6.1 私有仓库搭建与配置

  • 拉取私有仓库镜像

    docker pull registry

  • 启动私有仓库容器

    docker run -di --name=registry -p 5000:5000 registry

  • 打开浏览器 输入地址http://xxx:5000/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功并且内容为空

  • 修改daemon.json

    {"insecure-registries":["IP:PORT"]} —此步用于让docker信任私有仓库地址

  • 重启docker服务

    systemctl restart docker

  • 注意:重启docker后,服务都会停止,需要重新开启

6.2 Docker私有仓库镜像上传

  • 标记镜像为私有仓库的镜像

    docker tag 镜像名称 私有仓库地址/镜像名称

  • 上传私有仓库

    docker push 私有仓库地址/镜像名称