读书笔记---《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电子书] ~ 杨保华 戴王剑 曹亚仑 ...
随机推荐
- 【linux】记录一下遇到的各种问题
1. 解决办法: pthread不是Linux系统的默认库,编译时加上-lpthread参数,以调用链接库 gcc -o 文件名.out 文件名.c -lpthread 输出的时候直接 ./文件名.o ...
- 创建GitHub(注册、创建仓库)
说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字. 本文中假设用户名为 chenqiufei 1. 注册账号 地址: ...
- 理解EntityFramework两个核心类型的职责 DbSet和D'bContext
DbSet与DbContext是多对一的关系DbSet是实体对象的集合,提供了实现CRUD的相应方法DbContext封装与数据库和数据模型相关的功能,依据数据实体状态创建SQL命令,将数据更改保存到 ...
- 在idea 上springboot 1.5.6集成jsp页面
第一步:新建一个项目 推荐使用这个,默认下一步就好, 填写自己的信息,next, , 选择使用的功能,也可以新建好之后再pom.xml里手动添加, 选择项目存放地址,一个springboot的项目就建 ...
- Android Service完全解析(上)
转载:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Androi ...
- linux sed删除^M换行符以及^[[转义字符
1. 删除文档中的蓝色转义字符^M 注意:^M 不能从键盘输入^和M,也不能复制.而是需要按Ctrl+v 然后再按Ctrl+M 按Ctrl+v的时候屏幕不会输出,再按下Ctrl+M的时候即会出现^M ...
- linux开放指定端口命令
方式一 CentOS: 1.开启防火墙 systemctl start firewalld 2.开放指定端口 firewall-cmd --zone=public --add-p ...
- element-ui中table渲染的快速用法
element-ui中对table数据的渲染有一些模板式的操作,基本按照模板渲染数据即可 基本模板样式如下 <el-table :data="studentData.rows" ...
- Kirinriki
Kirinriki 定义两个长度相等的字符串\(\{a_i\},\{b_i\}\)的距离为\(\sum_{i=1}^n|a_i-b_{n-i+1}|\)(其中n为字符串的长度),给出一个字符串\(\{ ...
- Internet History 课程笔记
课程地址:https://www.coursera.org/learn/internet-history 科学|上网可解决视频加载不出来的问题 Week 1 High Stakes Research ...