Docker采用Linux(内核)技术,因此只能运行在Linux上,官方说Linux kernel至少3.8以上,且要是64位内核;html
docker-ce 默认文件系统为 overlay2 建议采用 CentOS 7.4 以上版本安装。本次采用 CentOS 7.7 x64linux
(1)安装依赖:nginx
yum install -y yum-utils device-mapper-persistent-data lvm2
(2)下载 yum 源文件redis
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
(3)把软件仓库地址替换为 TUNA:docker
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
(4)查看 docker-ce 版本json
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r Loading mirror speeds from cached hostfile Loaded plugins: fastestmirror Installed Packages docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos @docker-ce-stable …
yum install docker-ce # 安装最新版
yum install docekr-ce-<VERSION> # 安装指定版本
这里的安装命令:centos
[root@192.168.118.14 ~]#yum install docker-ce-18.06.3.ce-3.el7 -y
启动、中止等命令:bash
systemctl start|status|stop|enable docker
docker version 查看 docker 版本等信息服务器
docker info 查看 docker 详细配置信息app
docker-ce 18.06 采用的默认磁盘存储驱动为 overlay2
为 docker 运行 添加自定义参数:
[root@192.168.118.14 ~]#cat /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"], "hosts": ["tcp://192.168.118.14:2375", "unix:///var/run/docker.sock"], "data-root": "/data/docker-data", "storage-driver": "overlay2", "bip": "10.0.0.1/24", "fixed-cidr": "10.0.0.0/24" }
daemon.json 配置文件严格遵照 json 语法格式,不可以使用单引号,所有为双引号。
参数说明:
"registry-mirrors" 设置 docker 下载镜像加速,可配置多个; "hosts": 配置 docker daemon 监听方式; "data-root":修改docker存储数据的位置,默认目录为 /var/lib/docker "storage-driver":设定存储驱动为 overlay2 ,默认驱动为 overlay2 "bip":设置 docker0 网桥地址为10.0.0.1 此地址也为容器网关地址; "fixed-cidr":桥接到 docker0 上的容器地址范围是 10.0.0.0/24
重启 docker 服务
[root@192.168.118.14 ~]#systemctl restart docker
上面的配置修改可经过 docker info 查看。
docker run
可经过 docker run --help 查看相关参数。
执行一次的容器:
启动交互式容器:
测试通常这样启动容器
[root@192.168.118.14 ~]#docker run --name t1 --rm -it busybox /bin/sh
--name:为容器命名
--rm:容器结束后,删除该容器
-it:进入交互式模式
想要退出直接 exit 或者 Ctrl+D
docker ps [-a][-l] -a 列出全部建立的容器 -l 列出建立的最新的容器 不加参数,列出docker中正在运行的容器
docker inspect 容器名或者容器ID docker inspect t1 # 查看容器 t1 的详细信息 … …
查找镜像:
docker search 镜像名
下载镜像:
docker pull 镜像名
docker images 查看本地镜像文件
守护式容器:可以长期运行,没有交互式会话,适合运行应用程序和服务
在使用容器时,必须有一个工做在前台的守护进程且进程号为 1
经过 docker inspect ngx_1 查看容器的 ip 地址
经过宿主机直接访问:
经过上面 docker ps 查看 docker COMMAND 是一个运行在前台的守护进程,经过 docker exec 命令进入到 容器内查看:
docker exec 可直接进入容器内部
nginx master 进程PID 为 1
经过 docker logs 容器名 查看容器日志:
nginx master 进程PID 为 1
经过 docker logs 容器名 查看容器日志:
经过 docker top 查看容器内进程
中止守护式容器:docker stop 容器名
直接杀掉容器:docker kill 容器名
删除容器:docker rm 容器名
docker [-P|-p] -P: 将为容器暴露的全部端口进行映射:docker run -P nginx -p:指定映射容器的端口:docker run -p 80 nginx
访问宿主机的映射端口:
docker run --name ngx_1 --rm -P -d nginx:alpine --> 宿主机的端口将是随机映射
docker run --name ngx_1 --rm -p 8080:80 -d nginx:alpine --> 11对应的映射,将容器的80端口映射到宿主机的 8080 端口
能够绑定IP地址:
docker run --name ngx_1 --rm -p 192.168.118.14:8080:80 -d nginx:alpine
导出使用 docker save 容器名 > 容器名.tar.gz 导入使用 docker load < 容器名.tar.gz
save: 导出
load: 导入
查看镜像:
docker images
TAG 的做用主要有两点:
REPOSITORY:包含仓库信息,如 super.com/centos , 表示 super.com 仓库的 centos 名称镜像 TAG:同一个名称的镜像可能有多个版本,默认为 latest 版本(最新版),TAG 就标明了版本 IMAGE ID:镜像惟一 ID
所以能够经过两个方法肯定某个惟一的镜像:
注意:若是直接使用 “REPOSITORY”,则默认“TAG”为 “latest”,镜像 redis 就标识为 "redis:latest"
镜像名 "REPOSITORY:TAG" 能够用下面的命令重命名:
docker tag
注意:旧的镜像和新的镜像 IMAGE ID 是一致的。
拉取镜像: docker pull 镜像名 推送镜像: docker push NAME[:TAG]
192.168.118.14 私有仓库服务器
192.168.118.15 客户端
docker 确实很好用,一条命令,一个私有仓库就搭建完毕。
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
参数说明:
-d:后台运行 -v:把宿主机的 /opt/registry目录绑定 到 容器 /var/lib/registry 目录 -p:映射端口;访问宿主机的 5000端口就访问到 registry 容器的服务 --name registry 建立容器命名为 registry,能够随意定义 registry:经过这个镜像启动,若是本地没有,则会从 dockerhub 上下载再次启动
测试镜像仓库的全部镜像:
curl http://192.168.118.14:5000/v2/_catalog
192.168.118.15
(1)修改 /etc/docker/daemon.json
添加: "insecure-registries": ["192.168.118.14:5000"] 重启docker 服务 [root@192.168.118.15 ~]#systemctl restart docker
(2)为本地的镜像打标签
docker tag busybox:latest 192.168.118.14:5000/busybox:v0.1-1
(3)将镜像上传到私有仓库
docker push 192.168.118.14:5000/busybox
测试:
删除本地的镜像,尝试从 私有仓库拉取镜像
(1)将容器变成镜像
docker commit <container>[repo:tag] -a, --author="" 指定制做镜像的做者 -m, --message="" 记录构建镜像的信息 -p, --pause=true docker commit 命令会将正在执行的容器暂停,加上 -p 参数即不暂停运行的容器
优缺点:
方便快捷,
不规范,没法自动化
示例:
[root@192.168.118.14 ~]#docker run --name t1 -it busybox /bin/sh / # echo "<h1>hello busybox server.</h1>" > /tmp/index.html / # httpd --help BusyBox v1.31.0 (2019-09-04 17:25:45 UTC) multi-call binary. Usage: httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME] or httpd -d/-e/-m STRING Listen for incoming HTTP requests -i Inetd mode -f Don't daemonize -v[v] Verbose -p [IP:]PORT Bind to IP:PORT (default *:80) -u USER[:GRP] Set uid/gid after binding to port -r REALM Authentication Realm for Basic Authentication -h HOME Home directory (default .) -c FILE Configuration file (default {/etc,HOME}/httpd.conf) -m STRING MD5 crypt STRING -e STRING HTML encode STRING -d STRING URL decode STRING / # httpd -f -h /tmp/
开启另外一个ssh会话,进行 commit 操做
ssh server 是否应该包含到镜像中?
用 ssh server 管理容器并不理想,建议不用
一个容器究竟运行几个程序?
一个程序比较好,由于docker 只管前台程序是否正常
程序日志输出的问题?
经过 volume 或者 syslog 方式