装置根本配置
装置
办法1-脚本装置
在测试或开发环境中 Docker 官网为了简化装置流程,提供了一套便捷的装置脚本,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.docker.com/linux/centos/docker-ce.repo# 5、查看docker版本~ yum list docker-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
设置阿里云镜像
多说无益,间接截图
dockerhub账户关联
这个有点相似于composer的仓库地址就是用来存储咱们散会人员的镜像地址的;
官网:https://hub.docker.com
本人注册一个账号,这个过程我就跳过。
~ docker loginUsername: 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.205registry-1.docker.io. 33 IN A 35.169.133.189registry-1.docker.io. 33 IN A 34.202.247.184registry-1.docker.io. 33 IN A 3.224.11.4registry-1.docker.io. 33 IN A 3.82.34.201registry-1.docker.io. 33 IN A 34.195.36.112registry-1.docker.io. 33 IN A 3.221.133.86registry-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/hosts34.205.88.205 registry-1.docker.io~ systemctl restart docker
登入胜利之后,应用push命令就能够上传镜像,如果不指定tag则本地的镜像都会上传。如下实例:
留神docker hub的push要求是如下格局
docker push 注册名/镜像名:tag
能够在https://hub.docker.com的本人...,本人下来看吧。
镜像和容器最常用命令
镜像
# 查看现有的镜像列表docker images# 下载镜像# 这里下载了nginxdocker 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为v1docker tag redis5 haokeed/redis5:v1# 上传docker镜像到dockerhub。执行该命令时,集体倡议当初dockerhub上建设对应的仓库。建设好后能够在任何其余中央docker pull haokeed/redis5:v1docker 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(container级)的区别
export
和import
导出的是一个容器的快照
, 不是镜像自身, 也就是说没有 layer。
你的 dockerfile 里的 workdir, entrypoint 之类的所有货色都会失落,commit 过的话也会失落。快照
文件将抛弃所有的历史记录和元数据信息(即仅保留容器过后的快照状态),而镜像存储文件将保留残缺记录,体积也更大。而save
和load
保留的是镜像(image),载入的是镜像包。
- docker save 保留的是镜像(image),docker export 保留的是容器(container);
- docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会复原为镜像;
- docker load 不能对载入的镜像重命名,而 docker import 能够为镜像指定新名称。
Dockerfile语法
dockerfile文件样例:
FROM centosRUN groupadd -r redis && useradd -r -g redis redisRUN 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 alpineRUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositoriesRUN apk add gcc g++ libc-dev wget vim openssl-dev make linux-headersRUN mkdir -p /usr/src/redisRUN cd /usr/src/redisRUN 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/redisRUN 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