一、镜像
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容器。

最新文章

  1. [C#] 使用NPOI将Datatable保存到Excel
  2. 512M内存编译php出错
  3. MySQL使用索引的场景及真正利用索引的SQL类型
  4. c++实现之 -- 文章TF-IDF值的计算
  5. 利用SOLR搭建企业搜索平台 之——模式配置Schema.xml
  6. firebug js版
  7. Dynamics CRM 开发模板使用手册(插件开发)
  8. 利用jQuery打造个性网站
  9. [原]基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
  10. C#一定比C++性能差?当然不!破除迷信,从我做起!
  11. Shiro第六篇【验证码、记住我】
  12. FFPLAY的原理(二)
  13. 获取本地的jvm信息,进行图形化展示
  14. 在Hadoop 2.3上运行C++程序各种疑难杂症(Hadoop Pipes选择、错误集锦、Hadoop2.3编译等)
  15. [PHP] 看博客学习插入排序
  16. 【Git 使用笔记】第三部分:多分支开发
  17. 洛谷 P1072 Hankson 的趣味题 解题报告
  18. OpenCV---Canny边缘提取
  19. Java Tread多线程(1)实现Runnable接口
  20. windows config yii framework

热门文章

  1. mybatis 教程(mybatis in action)
  2. 如何在web项目中配置Spring的Ioc容器
  3. LeetCode Array Medium 11. Container With Most Water
  4. Linux面试基础(一)
  5. LinkedBlockingQueue 学习
  6. Codeforces 745E Hongcow Buys a Deck of Cards 状压DP / 模拟退火
  7. Dart编程实例 - 第一个Dart程序
  8. Spring源码剖析3:Spring IOC容器的加载过程
  9. Go语言基础:make,new, len, cap, append, delete方法
  10. unittest框架学习笔记五之参数化