• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

docker基础使用命令手册和操作(附带说明)

互联网 diligentman 1周前 (10-18) 7次浏览

安装基本配置

安装

方法1-脚本安装

在测试或开发环境中 Doc++ker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS
系统上可以使用这套脚本安装

# 在实际过程中get-docker.sh文件可能curl很慢。可以浏览器直接打开get.docker.com,将期复制下来,再创建get-docker.sh,将复制的内容保存进去。
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

方法2-普通命令行安装

# 1、更新update到最新的版本
~ yum update
# 2、卸载老版本docker
~ yum remove docker docker-common docker-selinux docker-engine
# 3、安装需要的软件包
~ yum install -y yum-utils device-mapper-persistent-data lvm2
# 4、设置yum源
~ yum-config-manager --add-repo https://download.doc++ker.com/linux/centos/docker-ce.repo
# 5、查看docker版本
~ yum list doc++ker-ce --showduplicates|sort -r
# 6、安装docker
~ yum install docker-ce-18.03.1.ce -y
# 7、启动docker
~ systemctl start docker
# 8、加入开机自启
~ systemctl enable docker
# 9、配置国内镜像,个人觉得国内镜像用专用的阿里云比较好。可看下方阿里云镜像源获取
~ vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://cr.console.aliyun.com/"]
}
~ ps -aux | grep docker

设置阿里云镜像

多说无益,直接截图
docker基础使用命令手册和操作(附带说明)

dockerhub账户关联

这个有点类似于composer的仓库地址就是用来存储我们开会人员的镜像地址的;
官网:https://hub.docker.com
自己注册一个账号,这个过程我就跳过。

~ docker login
Username: haokeed(对应dockerhub的账号)
Password:
Login Successded

# 异常!
# 在上面执行的代码可能出现如下异常 rror response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifest
# 这个问题的异常主要是
# 1. 解析ip不可用
# 2. 是因为dns域名没有解析的原因;
# 解决:
~ yum install bind-utils
~ dig @114.114.114.114 registry-1.docker.io

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @114.114.114.114 registry-1.docker.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57840
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;registry-1.docker.io. IN A
;; ANSWER SECTION:
registry-1.docker.io. 33 IN A 34.205.88.205
registry-1.docker.io. 33 IN A 35.169.133.189
registry-1.docker.io. 33 IN A 34.202.247.184
registry-1.docker.io. 33 IN A 3.224.11.4
registry-1.docker.io. 33 IN A 3.82.34.201
registry-1.docker.io. 33 IN A 34.195.36.112
registry-1.docker.io. 33 IN A 3.221.133.86
registry-1.docker.io. 33 IN A 3.224.75.242
;; Query time: 26 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: 三 4月 22 04:41:31 CST 2020
;; MSG SIZE rcvd: 177

~ vi /etc/hosts
34.205.88.205 registry-1.docker.io
~ systemctl restart docker

登入成功之后,使用push命令就可以上传镜像,如果不指定tag则本地的镜像都会上传。如下实例:
注意docker hub的push要求是如下格式

docker push 注册名/镜像名:tag

可以在https://hub.docker.com的自己…,自己上去看吧。

镜像和容器最常用命令

镜像

# 查看现有的镜像列表
docker images

# 下载镜像
# 这里下载了nginx
docker pull nginx


# 删除镜像
## 指定删除
docker rmi 镜像id(image id)
## 强制删除
docker rmi -f 镜像id(image id)
## 删除所有镜像
docker rmi $(docker images -q)

# 根据dockerfile构建镜像
# redis5:构建的镜像名称
# ".":构建的dockerfile文件目录在当前目录下
docker build -t redis5 .

# 执行tag修改
# 将原来构建镜像名为redis5的修改为haokeed/redis5,并打上tag为v1
docker tag redis5 haokeed/redis5:v1

# 上传docker镜像到dockerhub。执行该命令时,个人建议现在dockerhub上建立对应的仓库。建立好后可以在任何其他地方docker pull haokeed/redis5:v1
docker push haokeed/redis5:v1

容器

容器类型

  • 交互型容器:运行在前台,通常会制定有交互的控制台,可以给容器输入,也可以得到容器的输出。创建该日期的终端被关闭,在容器内部使用exit命令或者调用docker stop 、docker kill命令后,容器会停止运行。
  • 后台型容器:运行在后台,创建启动之后就与终端无关。即便终端关闭了,改后台容器也依然存在,只有执行docker stop或者docker kill命令

时候才能够使容器变成停止状态

# 启动容器
docker start 容器名

# 删除容器
docker rm 容器名

# 列出正在运行的容器
docker ps

# 显示所有的容器,包括未运行的
docker ps -a

# 停止所容器
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

# 基于镜像与构建容器
docker run -itd --name 容器名称(自定义) 镜像名称:标识

# docker run 执行语法和参数说明
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
    -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    -d: 后台运行容器,并返回容器ID;
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    --name="nginx-lb": 为容器指定一个名称;
    --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
    --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
    -h "mars": 指定容器的hostname;
    -e username="ritchie": 设置环境变量;
    --env-file=[]: 从指定文件读入环境变量;
    --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
    -m :设置容器使用内存最大值;
    --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
    --link=[]: 添加链接到另一个容器;
    --expose=[]: 开放一个端口或一组端口;
    
# 进入容器
# 这里表示进入容器名称为reids5的容器,并且以bash命令行模式进入
docker exec -it redis5 bash

导出与导入

容器的导出与导入

docker的流行与它对容器的易分享和易移植密不可分。用户不仅可以把容器提交到公共服务器上,还可以将容器导出到本地文件系统中。同样我们也可以讲导出的
容器重新导入到docker运行环境中。docker的导入和导出分别由import命令和export命令完成。

# 导出:将容器名称为redis5的导出,导出的文件为当前目录下的redis.tar,导出的是单个的tar文件
# docker export命令会把容器的文件系统以tar包的格式导出到标准输出,我们将其重定位到目标文件name.tar。将容器保存到本地文件也算是其持久化方式的一种。 
docker export redis5 > redis5.tar

# 容器的导入:我们可以使用docker import命令,导人一个本地的tar包作为镜像。
# 这里将redis5.tar文件导出为redis5:v1镜像。然后就可以通过docker run直接构建镜像了。
docker import redis5.tar redis5:v1

镜像的导出与导入

# 将指定镜像保存成 tar 归档文件
# docker save [OPTIONS] IMAGE [IMAGE...]
# options说明
# -o :输出到的文件。

# haokeed/redis5:v1导出为redis5.tar文件
docker save -o redis5.tar haokeed/redis5:v1

# 将redis5.tar导入镜像
docker load<redis5.tar

save/load(image级)和export/import(c++ontainer级)的区别

exportimport导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。而saveload保存的是镜像(image),载入的是镜像包。

  • docker save 保存的是镜像(image),docker export 保存的是容器(container);
  • docker load 用来载入镜像包,doc++ker import 用来载入容器包,但两者都会恢复为镜像;
  • docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。

Doc++kerfile语法

doc++kerfile文件样例:

FROM centos
RUN groupadd -r redis && useradd -r -g redis redis
RUN yum update -y ; 
yum -y install gcc automake autoconf libtool make wget epel-release gcc-c++;
RUN mkdir -p /usr/src/redis; 
wget https://github.com/antirez/redis/archive/5.0.7.tar.gz; 
tar -zxvf 5.0.7.tar.gz -C /usr/src/redis; 
rm -rf 5.0.7.tar.gz; 
cd /usr/src/redis/redis-5.0.7 && make && make PREFIX=/usr/local/redis install;
# 构建命令
docker build -t 名称 .

# 参数说明
Usage:docker build [OPTIONS] PATH | URL | -
OPTIONS:
    -t ,--tag list  #构建后的镜像名称
    -f, --file string #指定Dockerfiile文件位置

# 示例:
1 docker build .
2 docker build -t redis:v1 .
3 docker build -t redis:v2 -f /path/Dockerfile /path
# 一般常用第2种方式构建,我们在构建时都会切换到Dockerfile文件的目录下进行构建,所以不需要指定-f参

指令参数说明

  • FROM:指定基础镜像
    指定待扩展的父级镜像。除了注释外,在文件开头必须是一一个FROM指令, 接下来白指令便在这个父级镜像的环境中运行,直到遇到下一一个FROM指令。通过添加多个FROM命令可以在同一个Dockerfile文件中创建多个镜像。
    所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
  • RUN:执行命令
    RUN 指令是用来执行命令行命令的。
    格式:

    RUN <command> (类似/bin/sh -cshell格式)
    RUN ["executable", "param1", "param2"] (exec格式)
    
    # 类似shell脚本风格的:
    FROM alpine
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
    RUN apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers
    RUN mkdir -p /usr/src/redis
    RUN cd /usr/src/redis
    RUN wget -O redis-4.0.11.tar.gz "http://download.redis.io/releases/redis-4.0.11.tar.gz"
    RUN tar -xzf redis-4.0.11.tar.gz -C /usr/src/redis
    RUN cd /usr/src/redis/redis-4.0.11 && make && make PREFIX=/usr/local/redis install
  • MAINTAINER:用来声明创建的镜像的作者信息。
    格式为MAINTAINER user_name user_email,指定维护者信息。
  • EXPOSE:用来指明容器内进程对外开放的端口,多个端口之间使用空替隔力。运行容器通过参数-p(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,容器;或主机就可以通过映射后的端口与此容器通信。同时,我们也可以通过-p (小写)参数将dockerfile中EXPOSE中没有列出的端口设置成公开的。
  • ADD:向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件, 也可以是一个文件夹
  • ENV:设置容器运行的环境变量。在运行容器的时候,通过-e参数可以修改这个环境变量值,也可以添加新的环境变量。
    格式为:EVN key value 。用于指定环境变量,这些环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量。
    例如:
    ENV word hello
    RUN echo $word

喜欢 (0)