一、镜像
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 技术入门与实践》---其一的更多相关文章

  1. 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务

    之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...

  2. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  3. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  4. Docker 从入门到实践(一)Docker 简介

    读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...

  5. Docker从入门到实践

    一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...

  6. 《SaltStack技术入门与实践》—— Mine

    Mine 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Mine是SaltStack收集Minion数据存储到Master的一个组件,它的功能与Gr ...

  7. Docker技术入门与实战第2版-高清文字版

      Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...

  8. Docker技术入门与实战

      Docker技术入门与实战 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取分享码 本书目录结 ...

  9. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

随机推荐

  1. 【linux】记录一下遇到的各种问题

    1. 解决办法: pthread不是Linux系统的默认库,编译时加上-lpthread参数,以调用链接库 gcc -o 文件名.out 文件名.c -lpthread 输出的时候直接 ./文件名.o ...

  2. 创建GitHub(注册、创建仓库)

    说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字. 本文中假设用户名为 chenqiufei 1. 注册账号 地址: ...

  3. 理解EntityFramework两个核心类型的职责 DbSet和D'bContext

    DbSet与DbContext是多对一的关系DbSet是实体对象的集合,提供了实现CRUD的相应方法DbContext封装与数据库和数据模型相关的功能,依据数据实体状态创建SQL命令,将数据更改保存到 ...

  4. 在idea 上springboot 1.5.6集成jsp页面

    第一步:新建一个项目 推荐使用这个,默认下一步就好, 填写自己的信息,next, , 选择使用的功能,也可以新建好之后再pom.xml里手动添加, 选择项目存放地址,一个springboot的项目就建 ...

  5. Android Service完全解析(上)

    转载:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Androi ...

  6. linux sed删除^M换行符以及^[[转义字符

    1. 删除文档中的蓝色转义字符^M 注意:^M 不能从键盘输入^和M,也不能复制.而是需要按Ctrl+v 然后再按Ctrl+M 按Ctrl+v的时候屏幕不会输出,再按下Ctrl+M的时候即会出现^M  ...

  7. linux开放指定端口命令

    方式一 CentOS: 1.开启防火墙      systemctl start firewalld 2.开放指定端口       firewall-cmd --zone=public --add-p ...

  8. element-ui中table渲染的快速用法

    element-ui中对table数据的渲染有一些模板式的操作,基本按照模板渲染数据即可 基本模板样式如下 <el-table :data="studentData.rows" ...

  9. Kirinriki

    Kirinriki 定义两个长度相等的字符串\(\{a_i\},\{b_i\}\)的距离为\(\sum_{i=1}^n|a_i-b_{n-i+1}|\)(其中n为字符串的长度),给出一个字符串\(\{ ...

  10. Internet History 课程笔记

    课程地址:https://www.coursera.org/learn/internet-history 科学|上网可解决视频加载不出来的问题 Week 1 High Stakes Research ...