DockerNote

Docker安装及相关操作

Docker安装

1. 安装官方脚本

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2. 安装 Docker Engine-Community

  • 设置仓库

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

  • 配置config(清华源)

    sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

  • 安装 Docker Engine-Community

    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

  • 列出可用版本,然后选择并安装

    yum list docker-ce --showduplicates | sort -r

  • 安装特定版本

    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

    如:列表可用版本为 docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
    则<VERSION_STRING>:docker-ce-18.09.1

3. 启动、停止、查看状态、重启、开机自动启动DOCKER

sudo systemctl start docker

sudo systemctl stop docker

sudo systemctl status docker

sudo systemctl restart docker

sudo systemctl enable docker

4. 测试是否安装成功

sudo docker run hello-world

5. 卸载DOCKER

yum remove docker-ce

Docker使用

一、镜像相关

1.查看镜像
docker images

REPOSITORY:镜像名

TAG:版本

2.搜索镜像
docker search <镜像名>		

NAME:仓库名称

DESCRIPTION:镜像描述

STARS:用户评价

OFFICIAL:是否官方

AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3.拉取镜像
docker pull <镜像名>

例:docker pull centos:7

4.构建镜像

1.创建一个Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像

一般dockerfile包含三部分:1.环境依赖 2.路径 3.项目入口命令

FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 “docker build” 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
指令具体说明
COPYCOPY [–chown=:] <源路径1>… <目标路径>
COPY [–chown=:] [“<源路径1>”,… “<目标路径>”]
例如:COPY hom* /mydir/
COPY hom?.txt /mydir/
ADD优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
WORKDIRWORKDIR <工作目录路径>
EXPOSE声明端口,在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口
EXPOSE <端口1> [<端口2>…]

2.使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像

$ docker build -t  flaskr:2.0 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

3.push到仓库

$ docker push <repo:port>/flaskr:2.0
5.删除镜像
按ID删除:docker rmi <镜像ID>
删除所有镜像: docker rmi `docker images -q`

二、容器相关

1.查看容器
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
2.创建与启动容器
创建容器命令:docker run

-i: 表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-name :为创建的容器命名。
-V:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个一V做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

(1)交互式创建容器(退出后自动停止)

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

(2)守护式创建容器

docker run -di --name = 容器名称 镜像名称:标签
进入创建的容器:docker exec -it <容器名称> /bin/bash
3.停止与启动容器

停止容器:

docker stop <容器名称或ID>

启动容器:

docker start <容器名称或ID>
4.文件拷贝

把文件拷贝到容器中

docker cp <文件目录或文件> <容器名称>:<容器目录>

从容器中拷贝出来

docker cp <容器名称>:<容器目录> <文件目录或文件>
5.目录挂载

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

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

docker run -di -V /usr/local:/usr/local --name=<容器名称> <镜像名称>
6.查看容器IP
查看该容器所有信息:docker inspect <容器名称>        
信息中的"NetworkSettings":"IPAddress"即容器IP
直接查看IP:docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名称>
7.删除容器
docker rm <容器名称>
注意:镜像删除是 docker rmi <镜像名称>
8.创建私人仓库并进行push和pull

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库

1.下载镜像Docker Registry

docker pull registy

2.运行私有库Registry,相当于本地有个私有Docker hub

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

3.创建一个新镜像(具有ifconfig的flaskr)

docker run -it flaskr /bin/bash
apt-gte upadte
apt-get install net-tools

4.curl验证私服库上有什么镜像

curl -XGET http://192.168.233.134:5000/v2/_catalog

5.将新镜像修改符合私服规范的Tag

格式为:docker tag <镜像名>:Tag HOST:PORT/Repository:tag
docker tag flaskr:2.0 192.168.32.128:5000/myflaskr:2.0

6.修改json配置文件使之支持http**(别忘了逗号)**,改完后重启docker

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.233.234:5000"]
}

tips:json文件使用“//”进行注释

7.push到私服库

docker push 192.168.233.134:5000/myflaskr:2.0

8.再次curl验证私服库上有什么镜像

curl -XGET http://192.168.233.134:5000/v2/_catalog

9.pull到本地运行

docker pull 192.168.233.134:5000/v2/_catalog

Docker使用过程中遇到的问题

1.连接 Docker守护进程失败

报错信息:Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.

解决方法:/etc/docker/daemon.json 格式不对

正确格式:在这里插入图片描述

2.创建私人仓库后push连接失败问题

1.启动registry在这里插入图片描述

docker run -d <IMAGE ID>

在这里插入图片描述

在这里插入图片描述

发现没有暴露端口

查看端口是否占用:netstat -anlp | grep 5000
杀死没有暴露端口的registry进程:docker kill <IMAGE ID>
清除没有暴露端口的registry进程:docker rm <IMAGE ID>
给定端口映射:docker run -d -p 5000:5000 <IMAGE ID>

在这里插入图片描述

在这里插入图片描述

之前停了
systemctl restart docker
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值