读书笔记---《Docker 技术入门与实践》---其一
一、镜像
1.1、搜索
搜索所有nginx镜像
$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11305 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1588 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 709 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… 506 [OK]
webdevops/php-nginx Nginx with PHP-FPM 125 [OK]
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 98 [OK]
bitnami/nginx Bitnami nginx Docker Image 65 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 59
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
zabbix/zabbix-web-nginx-pgsql Zabbix frontend based on Nginx with PostgreS… 33 [OK]
tobi312/rpi-nginx NGINX on Raspberry Pi / ARM 26 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 18
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 15 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 14 [OK]
blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 12 [OK]
wodby/drupal-nginx Nginx for Drupal container image 12 [OK]
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 10
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 7
nginxinc/nginx-unprivileged Unprivile ged NGINX Dockerfiles 4
1science/nginx Nginx Docker images that include Consul Temp… 4 [OK]
mailu/nginx Mailu nginx frontend 3 [OK]
travix/nginx NGinx reverse proxy 2 [OK]
toccoag/openshift-nginx Nginx reverse proxy for Nice running on same… 1 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 0 [OK]
wodby/nginx
按条件搜索
--filter=[]
搜索官方nginx镜像
$ docker search --filter=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. [OK]
搜索收藏数高于100的镜像
$ docker search --filter=stars= nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… [OK]
webdevops/php-nginx Nginx with PHP-FPM [OK]
1.2、prune
用于删除系统中遗留的临时镜像文件,以及没有被使用的镜像
$ docker image prune -f
Total reclaimed space: 0B
1.3、导出导入镜像
首先从镜像源下载镜像
$ docker pull ubuntu:18.04
通过save命令导出镜像为tar包
$ docker save -o ubuntu_18..tar ubuntu:18.04
删除镜像
$ docker rmi ubuntu:18.04
使用cat结合import命令导入镜像
$ cat ubuntu_18..tar | docker import - ubuntu:18.04
也可以使用下面命令导入镜像
$ docker load < ubuntu_18..tar
1.4、push上传到镜像库
首先打开docker hub的网站进行注册
https://hub.docker.com
之后登陆网站,点击 “Create Repository” 创建仓库, 仓库名即为自己的用户名 XXXXX,填写 “Name” 即仓库下一级的文件名 ubuntu,选择 “Public”,设置为公开模式。
把要上传的镜像打上标记
$ docker tag ubuntu:latest XXXXX/ubuntu:latest
登陆库,输入账户名和密码
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: XXXXX
Password:
上传镜像
$ docker push XXXXX/ubuntu:latest
再次查看镜像库网站,发现已经上传完成。
二、容器
2.1、create 容器
只是创建容器,不启动,如果没有要启动的镜像,则需要自动pull下镜像,然后再创建容器
$ docker create -it ubuntu:latest
启动需要start
首先查看镜像,ps 是查看运行的容器,加上 -a 参数会查询所有的容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
553fe2651182 ubuntu:latest "/bin/bash" seconds ago Created brave_joliot
启动容器,加上容器ID或者容器名
$ docker start 553fe2651182
使用run创建并启动
$ docker run -it ubuntu:latest
2.2、暂停容器
后台启动容器
$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看日志发现一直在输出信息,c1f7afa8a509 是容器ID
$ docker logs -f c1f7afa8a509
暂停容器运行
$ docker pause c1f7afa8a509
暂停之后使用 docker ps 查看发现容器还在,但是状态变为 Paused,另外查看日志发现不在滚动了。
2.3、-t、--time 等待指定时间后再终止容器运行,默认 10 秒
$ docker stop --time= c1f7afa8a509
2.4、prune 清除处于停止状态的容器
$ docker container prune
2.5、进入容器
attach:
同时多个窗口进入同一个容器时,所有窗口都是同步显示的,一个窗口阻塞了,其他窗口也无法执行,这是一个弊端吧。
exec:
1.3.0版本后多了上边的这个命令,可以再运行的容器内执行任意命令。
重要的参数:
-d, --detach 在容器中后台执行命令
--detach-keys="" 指定将容器切回后台的按键
-e, --env=[] 指定环境变量列表
-i, --interactive=ture|false 打开标准输入接受用户输入命令,默认值为false
--privileged=ture|false 是否给执行命令以高权限,默认值为false
-t, --tty=ture|false 分配伪终端,默认值为false
-u, --user="" 执行命令的用户名或ID
例如下面的例子:
$ docker exec -it 553fe2651182 /bin/bash
进入容器,启动bash,但是并不影响其他打开的窗口。
2.6、导入导出
可以使用 -o 参数,或者使用重定向导出容器
进入容器,创建目录,文件,写入文件内容
export 导出容器
下面两种方式都可以
$ docker export -o running_ubuntu1.tar 553fe2651182
$ docker export 553fe2651182 >running_ubuntu2.tar
import 导入容器文件为镜像
$ docker import running_ubuntu1.tar test/ubuntu:v1.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1. c24420ad0828 seconds ago .5MB
运行容器
$ docker run -it test/ubuntu:v1. /bin/bash
查看目录文件及文件内容,都和之前的一样。
load和import的区别,import导入的方式,容器快照文件丢失了所有的历史记录和元数据信息,仅保存当时的容器快照状态,而镜像存储文件将保存完整记录,体积更大,另外从容器快照导入时可以重新指定标签等元数据信息。
2.7、查看容器信息
查看容器进程
$ docker top 553fe2651182
UID PID PPID C STIME TTY TIME CMD
root : pts/ :: /bin/bash
root : pts/ :: /bin/bash
查看统计信息
$ docker stats 553fe2651182
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
553fe2651182 brave_joliot 0.00% 844KiB / .789GiB 0.05% 648B / 0B 0B / 0B
查看容器内数据修改
$ docker container diff 553fe2651182
A /data
A /data/data
A /data/data/test1.txt
A /data/data1
A /data/data1/test2.txt
A /data/test.txt
查看容器端口映射
$ docker container port 553fe2651182
2.8、本地和容器拷贝文件
本地创建目录,文件,输入内容到文件,把本地文件拷贝到容器。
$ docker cp data 553fe2651182:/data/
把当前目录下 data 目录拷贝到容器 /data 目录,之后在容器上发现目录 data 及文件,文件内容一致
在容器创建目录,文件,输入内容到文件,把容器文件拷贝到本地。
$ docker container cp 553fe2651182:/data/data1 .
把容器 /data/data1 目录拷贝到当前目录,之后在当前目录下发现目录 data1 及文件,文件内容一致。
三、数据管理
对数据进行持久化,或者需要在多个容器之间进行数据共享,就涉及到容器的数据管理操作。
管理数据方式:
1)数据卷(Data Volumes): 容器内数据直接映射到本地主机环境
2)数据卷管理(Data Volumes Containers): 使用特定容器维护数据卷
数据卷:
一个可供容器使用的特殊目录,将主机操作系统目录直接映射进容器,类似Linux中mount。
创建数据卷
$ docker volume create -d local test
3.1、数据卷容器
创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata
$ docker run -d -it -v /dbdata --name dbdata ubuntu
然后,创建其他两个容器使用 --volumes-from 来挂载dbdata容器中的数据卷
$ docker run -d -it --volumes-from dbdata --name db1 ubuntu $ docker run -d -it --volumes-from dbdata --name db2 ubuntu
进入容器dbdata
$ docker exec -it CONTAINER_ID /bin/bash
进入目录 dbdata ,创建文件 test
结果进入其他两个容器的 dbdata目录,也存在test文件
3.2、利用数据卷容器来迁移数据
使用下面命令来备份数据卷容器dbdata内的数据卷
$ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
说明:
利用ubuntu镜像创建一个容器worker,使用 --volumes-from dbdata 参数来让worker容器挂载dbdata数据卷;使用 -v $(pwd):/backup 参数来挂载本地的当前目录到worker容器的/backup 目录 。
worker容器启动后,使用tar cvf /backup/backup.tar /dbdata 命令将/dbdata 下内容备份为容器的/backup/backup.tar,即宿主机当前目录下的backup.tar。
四、端口映射和容器互联
4.1、外部访问容器应用
-p或者-P 参数指定端口映射,-P(大写),docker会随机映射一个49000~49900的端口到内部开放的网络端口:
$ docker run -d -P training/webapp python app.py
使用 docker ps 可以查看本地主机和docker容器的端口信息,可以看到本地主机的32768映射到了容器的5000端口。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fc4f8e721b training/webapp "python app.py" seconds ago Up seconds 0.0.0.0:->/tcp jolly_turing
-p(小写)可以指定要映射的端口,一个指定端口上只可以绑定一个容器,映射本地5000端口到容器5000端口,默认绑定的本地的所有地址:
$ docker run -d -p : training/webapp python app.py
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc2c5af48a89 training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp mystifying_colden
绑定多个端口
$ docker run -d -p : -p : training/webapp python app.py
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f57b63b16bde training/webapp "python app.py" seconds ago Up seconds 0.0.0.0:->/tcp, 0.0.0.0:->/tcp reverent_payne
映射指定地址的指定端口
$ docker run -d -p 127.0.0.1:: training/webapp python app.py
绑定 localhost 的任意端口到容器的5000 udp端口,本地主机自动分配一个端口
$ docker run -d -p 127.0.0.1::/udp training/webapp python app.py
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b00e96919a9e training/webapp "python app.py" seconds ago Up seconds /tcp, 127.0.0.1:->/udp jolly_cori
可以使用docker port 来查看当前映射的端口配置,可以看到绑定的本地地址和端口
$ docker port jolly_cori /udp
127.0.0.1:
4.2、互联机制实现便捷互访
创建数据库容器,--name 是为容器命名,容器的名称是唯一的
$ docker run -d --name db training/postgres
创建web容器,并连接到db容器,--link 参数格式是 --link name:alias ,name 是容器名称,alias 是别名
$ docker run -d -P --name web --link db:db training/webapp python app.py
env 可以查看web容器的环境变量
$ docker run --rm --name web2 --link db:db training/webapp env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=727e6c623a3f
DB_PORT=tcp://172.17.0.8:5432
DB_PORT_5432_TCP=tcp://172.17.0.8:5432
DB_PORT_5432_TCP_ADDR=172.17.0.8
DB_PORT_5432_TCP_PORT=
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
HOME=/root
进入web容器
$ docker run -t -i --rm --link db:db training/webapp /bin/bash
查看web容器的hosts文件
root@b9d26daaf8eb:/opt/webapp# cat /etc/hosts
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.8 db 6e043f32681a
172.17.0.9 b9d26daaf8eb
这里有两个hosts信息,第一个是db容器,第二个是web容器
ping命令测试和db容器的连通
首先安装工具,然后执行ping命令
root@b9d26daaf8eb:/opt/webapp# apt-get install -yqq inetutils-ping
root@b9d26daaf8eb:/opt/webapp# ping db
PING db (172.17.0.8): data bytes
bytes from 172.17.0.8: icmp_seq= ttl= time=0.311 ms
bytes from 172.17.0.8: icmp_seq= ttl= time=0.115 ms
bytes from 172.17.0.8: icmp_seq= ttl= time=0.109 ms
会把容器名解析为地址
用户可以链接多个子容器到父容器,比如可以链接多个web到同一个db容器。
读书笔记---《Docker 技术入门与实践》---其一的更多相关文章
- 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务
之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Docker 从入门到实践(一)Docker 简介
读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...
- Docker从入门到实践
一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...
- 《SaltStack技术入门与实践》—— Mine
Mine 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Mine是SaltStack收集Minion数据存储到Master的一个组件,它的功能与Gr ...
- Docker技术入门与实战第2版-高清文字版
Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...
- Docker技术入门与实战
Docker技术入门与实战 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取分享码 本书目录结 ...
- 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...
随机推荐
- Python值正则表达式(RE)
要想在Python中使用正则表达式,首先要引入模块: import re . 匹配任意一个 + 匹配至少一个 * 匹配0个至多个 ? 1个或0个(可有可无) - 表范围 \ 转义 ^ 在首 $ ...
- 【WPF】一些拖拽实现方法的总结(Window,UserControl)
原文:[WPF]一些拖拽实现方法的总结(Window,UserControl) 原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文 ...
- 事件循环--eventloop
一.什么是事件循环? 事件循环是 JS 实现异步的具体解决方案,同步代码直接执行,异步函数或代码块先放在异步队列中,待同步函数执行完毕,轮询执行异步队列的函数. 事件循环 二.node.js中的事件循 ...
- ethtool---查看网卡
ethtool 命令详解 命令描述: ethtool 是用于查询及设置网卡参数的命令. 使用概要:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如et ...
- Java 连接池的工作原理
什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了, ...
- jquery控件-实现自定义样式的弹出窗口和确认框(转)
(function () { $.MsgBox = { Alert: function (title, msg) { GenerateHtml("alert", title, ms ...
- linux,进行批量下载文件操作
wget -i url.txt -P ./Photo 批量下载图片(一般是某个相册的图片) 首先先得到一张图片的地址如:www.example.com/pic/001.jpg 同相册的图片地址会有一 ...
- 阿里linux-Centos各版本下载
https://mirrors.aliyun.com/centos/7/isos/x86_64/ Index of /centos/7/isos/x86_64/ ../ 0_README.txt 16 ...
- 【JNDI】Java Naming and Directory Interface
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conn ...
- RestHighLevelClient客户端相关CURD操作
客户端连接 public void start() { try { restHighLevelClient = new RestHighLevelClient( RestClient.builder( ...