镜像:类似虚拟机的镜像(可看作Java中的类)
容器:类似启动的虚拟机(可看作Java类的实例对象)
仓库:类似代码仓库,是docker存放镜像的地方
1.安装指南:https://docs.docker.com/engine/installation/linux/ubuntulinux/
1.安装 linux-image-extra-* kernel packages
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
2.安装docker-engine
$ uname -r
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
创建docker.list文件
$ sudo vi /etc/apt/sources.list.d/docker.list
添加内容:
deb https://apt.dockerproject.org/repo ubuntu-xenial main
保存文件,并执行以下操作
$ sudo apt-get update
$ sudo apt-get purge lxc-docker
$ apt-cache policy docker-engine
$ sudo apt-get upgrade
2.启动Docker --- 后台运行
Docker只能root或名为docker的组内用户操作
1.启动 sudo service docker start
2.关闭 sudo service docker stop
3.搜索并拉取公共镜像 image
docker search image_name
sudo docker pull image_name
4.运行Docker程序
eg:
sudo docker pull hello-world
sudo docker run hello-world
3.拉取ubuntu镜像:
1.从docker官方拉取
docker pull ubuntu:14.04
2.从网易云docker仓库拉取
docker pull hub.c.163.com/library/ubuntu:latest
3.为本地镜像添加新的标签 -- 镜像复制后重命名
docker tag ubuntu:latest ubuntu:16.04
4.docker inspect 镜像ID 获取镜像的详细信息
返回的是一个json格式的字符串,如果只想获取其中指定的内容,可以通过-f指定参数:
docker inpsect -f {{".Architecture"}} image_id或 image_name
5.查找镜像
docker search image
6.删除镜像 (先删除容器才能删除镜像)
docker rmi image_name或image_id
7.创建镜像 3种方式
1.基于已有镜像创建
2.基于本地模板导入
3.基于Dockerfile文件创建
1.基于已有镜像创建
docker commit [options] container [repository[:tag]]
options参数:
-a、--author="":作者信息
-m\--message="":提交消息
-p、--pause=true:提交时暂停容器运行
eg:
docker commit -m "message" -a "Jay" 容器ID 新容器TAG 新容器ID
2.基于本地模板导入
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
8.镜像导出
1.导出镜像为文件 docker save
docker save -o ubuntu.tar ubuntu:14.04
2.从文件导入镜像
docker load < ubuntu.tar
9.上传镜像
docker push 默认上传到DockerHub官方
4.自定义镜像
1.创建镜像定义文件的目录
mkdir jay_ubuntu
2.创建Dockerfile文件,并添加下面内容
#设置继承自哪个镜像
FROM hub.c.163.com/library/ubuntu:latest
#创建者信息
MAINTAINER JayHe
#在终端需要执行的命令
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
3.根据Dockerfile创建镜像
docker build -t="jay/ubuntu:v1" .
注意:
命令中的最后一个点 不能省略,表示当期目录
4.查看创建的镜像
docker images
5.删除已创建的镜像(必须停止该镜像的所有容器,要删除的镜像,不能有基于自己的子镜像)
#按id删除
docker rmi -f image_id
#按name删除
docker rmi -f image_name
5.运行容器
创建容器:
1.新建容器 创建好的容器处于停止状态,使用 docker start 启动容器
docker create -it ubuntu:latest
2.启动容器
1.基于镜像新建容器并启动 docker run <==> docker create + docker start
docker run ubuntu /bin/bash "Hello World"
#启动一个bash终端与用户交互
docker run -t -i ubuntu /bin/bash
参数解析:
-t 让docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
2.启动处于停止状态的容器
docker start 容器id或name
3.终止容器
docker stop 容器id或name
4.查看容器
#查看所有容器
docker ps -a -q
5.进入容器
说明:
启动容器时, -d 参数会让容器在后台运行,无法直接看到容器中的内容
1.attach命令 进入容器
#后台一个启动容器
docker run -idt ubuntu:14.04
#进入容器
docker attach 容器name
注意:
当多个窗口(终端)同时attach到一个容器时,所有窗口都会同步显示,当某个窗口因为命令等阻塞后,其他窗口也会被阻塞而不能执行操作。
2.exec命令 docker1.3以上版本, 可以直接在容器中运行命令
eg:
#进入并启动一个bash
docker exec -ti 容器ID /bin/bash
6.删除容器
docker rm [options] container [container...]
options选项:
-f、--force=false:因为运行中的容器默认是不能被删除的,这个参数就是强行终止并删除一个运行中的容器。
-l、--link=false:删除容器的连接,但保留容器。
-v、--volumes=false:删除容器挂在的数据卷。
eg:
#删除终止状态的容器
docker rm 容器ID
#删除运行中的容器
docker rm -f 容器ID
7.导入导出容器
1.导出容器到文件
docker export 容器ID > 导出文件名.tar
2.从文件导入容器 对于刚刚导出的容器,对于使用docker import命令导入然后成为镜像
cat 文件名.tar | docker import - 镜像名:TAG
eg:
cat test.rar | docker import - test/ubuntu:v0.0.1
1.运行Hello World
docker run ubuntu:14.04 echo "Hello World"
2.在容器内运行一个ubuntu的shell (类似:开启并进入了一个ubuntu14.04的虚拟机)
#-t选项是docker分配一个伪终端并绑定到容器的标准输入上,-i让容器的标准输入保持打开,
-d让容器后台运行
docker run -t -i ubuntu:14.04 /bin/bash
3.查看当前运行的容器
docker ps [-l]
4.docker run 参数:
Docker run 运行一个容器
<=> docker create + start
ubuntu 镜像名字
-t 一个新容器内部的伪终端
-i 能与容器进行交互,交互模式
/bin/bash 在容器内启动Bash shell
-d 后台运行
docker ps 列出当前运行的容器
docker ps -a -q 查看处于终止状态的容器
docker logs 显示某个容器的输出
docker stop 停止某个容器的运行
docker version 输出docker版本信息
5.指定容器的端口映射 --- 启动容器 --- docker run
#直接启动一个容器 --- 非后台服务,-d 参数可设置为后台运行进程
docker run -p 9090:22 -ti jayhe/ubuntu_tools:v1
#以后台服务形式运行一个jayhe/ubuntu_tools:v1容器,并启动容器中的ssh服务
docker run -d -p 9000:22 jayhe/ubuntu_tools:v1 /usr/sbin/sshd -D
6.停止运行的容器 --- docker stop 容器id或容器name
#查看运行的容器
root@jayhe-ThinkPad-T450:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3aa9fdb2dc23 jayhe/ubuntu:v1 "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:9001->22/tcp lonely_easley
9fcbe96d1744 jayhe/ubuntu:v1 "/usr/sbin/sshd -D" 4 minutes ago Up 4 minutes 0.0.0.0:9000->5000/tcp tiny_mcnulty
#指定停止运行的容器
docker stop 3aa9fdb2dc23
#停止所有的容器,这样才能删除其中的images
docker stop $(docker ps -a -q)
#删除指定容器 删除终止状态的容器,-f强行终止并删除一个运行中的容器
docker rmi 容器id或容器name
#删除所有容器
方法1:先停止所有容器,再删除
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
方法2:
docker rmi $(docker images q)
删除untagged images,即:id为<None>的image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
删除所有镜像:
docker rmi $(docker images -q)
7.docker容器操作的相关命令和参数
-P 映射容器端口到主机端口
-l 告诉docker显示最后启动的容器信息
-a 显示所有容器的信息,包括已经停止运行的容器
PORTS 为容器端口与主机端口之间的映射
-p 80:5000 容器的5000端口映射主机的80端口
docker port 容器name/id 端口号,可以查看指定容器的端口5000映射到主机的端口
-f,类似Linux tail -f,查看容器的标准输出
docker top 用来查看容器内部运行的进程
docker inspect 查看容器的配置与状态信息,返回的是JSON串
docker inspect -f ,查询JSON串中的指定内容
docker rm 只能移除已经停止运行的容器,因此在用之前,需要用docker stop 停止运行你想要移除的容器
特别注意:
1.关于Docker容器的端口映射
docker run -p 80:5000 xxx
docker run -p 9099:5000 xxx
主机的两个端口 80端口和9099端口,都映射到了容器的5000端口,
可通过localhost:80和localhost:9099访问不同的容器,
虽然两个容器的端口都是5000,但它们是不一样的,容器的namespace属性会将两个容器隔离开,因此它们对应的主机端口是不一样的
2.ssh的端口是22
eg:
#启动Docker容器中的ssh服务,并进行端口映射到主机的8888端口
root@jayhe-ThinkPad-T450:~# docker run -p 8888:22 jayhe/ubuntu_tools:latest /usr/sbin/sshd -D
#主机,通过ssh连接docker启动的容器中的ssh --- 类似:通过本机,连接到docker启动的ubuntu虚拟机
root@jayhe-ThinkPad-T450:/home/jayhe/jay/docker/my_images/jay_ubuntu# ssh admin@localhost -p 8888
admin@localhost's password: admin
Could not chdir to home directory /home/admin: No such file or directory
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
admin@0ab0e1aeb1a4:/$ sudo su
[sudo] password for admin: admin
root@0ab0e1aeb1a4:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@0ab0e1aeb1a4:/#
8.docker删除镜像image
1.移除exited状态的容器
$ docker rm $(docker ps -q -f status=exited)
整理成shell脚本:
#!/bin/sh
processes = 'docker ps -q -f status=exited'
if [ -n "$processes" ];then
docker rm $processes
fi
2. 删除untagged images,即:id为<None>的image
docker rmi -f $(docker images -a |grep 'none'|awk '{print $3}')
说明:
docker images -a |grep 'none' 过滤出所有 none的镜像
docker images -a |grep 'none'|awk '{print $3}' 输出过滤后的镜像内容的第三列(即:image id)
6.Docker 基础网络配置
1.端口映射实现访问容器
从外部访问容器应用 -P或-p参数,指定端口映射,映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 traing/webapp python app.py
即:
可以通过 127.0.0.1:5000访问容器的应用
2.查看映射端口配置
docker port 容器name 或 容器_id 5000
3.容器互联实现容器间通信
--name 为容器自定义命名
docker run -d -p 8080:5000 --name web tranning/webapp java Test
通过 docker inspect 查看容器名字
docker inspect -f {{".RepoTags"}} 容器ID或容器名称
4.容器互联
#创建一个新的数据库容器
docker run -d --name db training/mysql
#删除之前创建的web容器
docker rm -f web
#创建新的web容器,并将它连接到db容器
docker run -d -p --name web --link db:db traning/webapp python app.py
解析:
此时db容器和web容器建立了互联关系
--link参数格式:
--link name:alias
name: 要连接的容器名称
alias:这个连接的别名
docker通过两种方式为容器公开连接信息
1.环境变量
2.更新 /etc/hosts文件
eg:
#用env命令来查看web容器的环境变量
docker run --rm --name web2 --link db:db traning/webapp env
7.Docker 之 mysql
1.拉取mysql镜像
docker pull mysql:5.6
2.运行mysql容器
#后台运行
docker run --name db001 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
#前台运行
docker run --name db001 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -ti mysql:5.6
解析:
容器名称:db001,mysql的root用户密码:root,
映射宿主机子的端口3306到容器端口3306,使用镜像 mysql:5.6
3.查看运行的容器
root@jayhe-ThinkPad-T450:/home/jayhe/jay/docker/my_images/jay_jdk8_tomcat8# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b392d3abc6 mysql:5.6 "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp db001
4.删除容器
docker rm $(docker ps -a|grep db001)
5.查看容器的端口映射关系
docker port 容器id或name
8.Docker之redis
1.拉取redis镜像
docker pull redis
2.启动容器
docker run --name redis-6379 -p 6379:6379 -ti redis:latest
解析:
容器名称:redis-6379,端口映射 宿主机 6379 对应容器 6379 , -ti 前端交互方式运行容器 , -d 参数:可指定容器后台运行
3.删除容器名称包含redis的容器
docker rm $(docker ps -a|grep redis)
4.宿主机安装redis
下载redis最新办tar.gz,解压后,找到路径,运行 make 命令
9.Docker之MongoDB
1.拉取MongoDB镜像
docker pull mongo:3.2.10
2.启动容器
#前台启动
docker run --name mongo_server1 -p 21117:27017 mongo:3.2.10
#后台启动
docker run --name mongo_server1 -d -p 21117:27017 mongo:3.2.10
3.本地连接到容器的mongodb数据库
root@jayhe-ThinkPad-T450:/home/jayhe/jay/soft/mongodb-linux-x86_64-3.2.6/bin# ./mongo -port 21117
4.Docker下创建MongoDB复制集群
参考:http://blog.csdn.net/pddddd/article/details/46893593
10.Docker之Tomcat
1.拉取Tomcat最新镜像
docker pull tomcat
2.启动Tomcat容器
#前台启动,端口映射为 18080 到 容器 8080,如果想作为后台服务启动,加 -d 参数
docker run -p 18080:8080 tomcat:latest
3.宿主机访问
http://localhost:18080
容器:类似启动的虚拟机(可看作Java类的实例对象)
仓库:类似代码仓库,是docker存放镜像的地方
1.安装指南:https://docs.docker.com/engine/installation/linux/ubuntulinux/
1.安装 linux-image-extra-* kernel packages
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
2.安装docker-engine
$ uname -r
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
创建docker.list文件
$ sudo vi /etc/apt/sources.list.d/docker.list
添加内容:
deb https://apt.dockerproject.org/repo ubuntu-xenial main
保存文件,并执行以下操作
$ sudo apt-get update
$ sudo apt-get purge lxc-docker
$ apt-cache policy docker-engine
$ sudo apt-get upgrade
2.启动Docker --- 后台运行
Docker只能root或名为docker的组内用户操作
1.启动 sudo service docker start
2.关闭 sudo service docker stop
3.搜索并拉取公共镜像 image
docker search image_name
sudo docker pull image_name
4.运行Docker程序
eg:
sudo docker pull hello-world
sudo docker run hello-world
3.拉取ubuntu镜像:
1.从docker官方拉取
docker pull ubuntu:14.04
2.从网易云docker仓库拉取
docker pull hub.c.163.com/library/ubuntu:latest
3.为本地镜像添加新的标签 -- 镜像复制后重命名
docker tag ubuntu:latest ubuntu:16.04
4.docker inspect 镜像ID 获取镜像的详细信息
返回的是一个json格式的字符串,如果只想获取其中指定的内容,可以通过-f指定参数:
docker inpsect -f {{".Architecture"}} image_id或 image_name
5.查找镜像
docker search image
6.删除镜像 (先删除容器才能删除镜像)
docker rmi image_name或image_id
7.创建镜像 3种方式
1.基于已有镜像创建
2.基于本地模板导入
3.基于Dockerfile文件创建
1.基于已有镜像创建
docker commit [options] container [repository[:tag]]
options参数:
-a、--author="":作者信息
-m\--message="":提交消息
-p、--pause=true:提交时暂停容器运行
eg:
docker commit -m "message" -a "Jay" 容器ID 新容器TAG 新容器ID
2.基于本地模板导入
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
8.镜像导出
1.导出镜像为文件 docker save
docker save -o ubuntu.tar ubuntu:14.04
2.从文件导入镜像
docker load < ubuntu.tar
9.上传镜像
docker push 默认上传到DockerHub官方
4.自定义镜像
1.创建镜像定义文件的目录
mkdir jay_ubuntu
2.创建Dockerfile文件,并添加下面内容
#设置继承自哪个镜像
FROM hub.c.163.com/library/ubuntu:latest
#创建者信息
MAINTAINER JayHe
#在终端需要执行的命令
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
3.根据Dockerfile创建镜像
docker build -t="jay/ubuntu:v1" .
注意:
命令中的最后一个点 不能省略,表示当期目录
4.查看创建的镜像
docker images
5.删除已创建的镜像(必须停止该镜像的所有容器,要删除的镜像,不能有基于自己的子镜像)
#按id删除
docker rmi -f image_id
#按name删除
docker rmi -f image_name
5.运行容器
创建容器:
1.新建容器 创建好的容器处于停止状态,使用 docker start 启动容器
docker create -it ubuntu:latest
2.启动容器
1.基于镜像新建容器并启动 docker run <==> docker create + docker start
docker run ubuntu /bin/bash "Hello World"
#启动一个bash终端与用户交互
docker run -t -i ubuntu /bin/bash
参数解析:
-t 让docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
2.启动处于停止状态的容器
docker start 容器id或name
3.终止容器
docker stop 容器id或name
4.查看容器
#查看所有容器
docker ps -a -q
5.进入容器
说明:
启动容器时, -d 参数会让容器在后台运行,无法直接看到容器中的内容
1.attach命令 进入容器
#后台一个启动容器
docker run -idt ubuntu:14.04
#进入容器
docker attach 容器name
注意:
当多个窗口(终端)同时attach到一个容器时,所有窗口都会同步显示,当某个窗口因为命令等阻塞后,其他窗口也会被阻塞而不能执行操作。
2.exec命令 docker1.3以上版本, 可以直接在容器中运行命令
eg:
#进入并启动一个bash
docker exec -ti 容器ID /bin/bash
6.删除容器
docker rm [options] container [container...]
options选项:
-f、--force=false:因为运行中的容器默认是不能被删除的,这个参数就是强行终止并删除一个运行中的容器。
-l、--link=false:删除容器的连接,但保留容器。
-v、--volumes=false:删除容器挂在的数据卷。
eg:
#删除终止状态的容器
docker rm 容器ID
#删除运行中的容器
docker rm -f 容器ID
7.导入导出容器
1.导出容器到文件
docker export 容器ID > 导出文件名.tar
2.从文件导入容器 对于刚刚导出的容器,对于使用docker import命令导入然后成为镜像
cat 文件名.tar | docker import - 镜像名:TAG
eg:
cat test.rar | docker import - test/ubuntu:v0.0.1
1.运行Hello World
docker run ubuntu:14.04 echo "Hello World"
2.在容器内运行一个ubuntu的shell (类似:开启并进入了一个ubuntu14.04的虚拟机)
#-t选项是docker分配一个伪终端并绑定到容器的标准输入上,-i让容器的标准输入保持打开,
-d让容器后台运行
docker run -t -i ubuntu:14.04 /bin/bash
3.查看当前运行的容器
docker ps [-l]
4.docker run 参数:
Docker run 运行一个容器
<=> docker create + start
ubuntu 镜像名字
-t 一个新容器内部的伪终端
-i 能与容器进行交互,交互模式
/bin/bash 在容器内启动Bash shell
-d 后台运行
docker ps 列出当前运行的容器
docker ps -a -q 查看处于终止状态的容器
docker logs 显示某个容器的输出
docker stop 停止某个容器的运行
docker version 输出docker版本信息
5.指定容器的端口映射 --- 启动容器 --- docker run
#直接启动一个容器 --- 非后台服务,-d 参数可设置为后台运行进程
docker run -p 9090:22 -ti jayhe/ubuntu_tools:v1
#以后台服务形式运行一个jayhe/ubuntu_tools:v1容器,并启动容器中的ssh服务
docker run -d -p 9000:22 jayhe/ubuntu_tools:v1 /usr/sbin/sshd -D
6.停止运行的容器 --- docker stop 容器id或容器name
#查看运行的容器
root@jayhe-ThinkPad-T450:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3aa9fdb2dc23 jayhe/ubuntu:v1 "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:9001->22/tcp lonely_easley
9fcbe96d1744 jayhe/ubuntu:v1 "/usr/sbin/sshd -D" 4 minutes ago Up 4 minutes 0.0.0.0:9000->5000/tcp tiny_mcnulty
#指定停止运行的容器
docker stop 3aa9fdb2dc23
#停止所有的容器,这样才能删除其中的images
docker stop $(docker ps -a -q)
#删除指定容器 删除终止状态的容器,-f强行终止并删除一个运行中的容器
docker rmi 容器id或容器name
#删除所有容器
方法1:先停止所有容器,再删除
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
方法2:
docker rmi $(docker images q)
删除untagged images,即:id为<None>的image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
删除所有镜像:
docker rmi $(docker images -q)
7.docker容器操作的相关命令和参数
-P 映射容器端口到主机端口
-l 告诉docker显示最后启动的容器信息
-a 显示所有容器的信息,包括已经停止运行的容器
PORTS 为容器端口与主机端口之间的映射
-p 80:5000 容器的5000端口映射主机的80端口
docker port 容器name/id 端口号,可以查看指定容器的端口5000映射到主机的端口
-f,类似Linux tail -f,查看容器的标准输出
docker top 用来查看容器内部运行的进程
docker inspect 查看容器的配置与状态信息,返回的是JSON串
docker inspect -f ,查询JSON串中的指定内容
docker rm 只能移除已经停止运行的容器,因此在用之前,需要用docker stop 停止运行你想要移除的容器
特别注意:
1.关于Docker容器的端口映射
docker run -p 80:5000 xxx
docker run -p 9099:5000 xxx
主机的两个端口 80端口和9099端口,都映射到了容器的5000端口,
可通过localhost:80和localhost:9099访问不同的容器,
虽然两个容器的端口都是5000,但它们是不一样的,容器的namespace属性会将两个容器隔离开,因此它们对应的主机端口是不一样的
2.ssh的端口是22
eg:
#启动Docker容器中的ssh服务,并进行端口映射到主机的8888端口
root@jayhe-ThinkPad-T450:~# docker run -p 8888:22 jayhe/ubuntu_tools:latest /usr/sbin/sshd -D
#主机,通过ssh连接docker启动的容器中的ssh --- 类似:通过本机,连接到docker启动的ubuntu虚拟机
root@jayhe-ThinkPad-T450:/home/jayhe/jay/docker/my_images/jay_ubuntu# ssh admin@localhost -p 8888
admin@localhost's password: admin
Could not chdir to home directory /home/admin: No such file or directory
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
admin@0ab0e1aeb1a4:/$ sudo su
[sudo] password for admin: admin
root@0ab0e1aeb1a4:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@0ab0e1aeb1a4:/#
8.docker删除镜像image
1.移除exited状态的容器
$ docker rm $(docker ps -q -f status=exited)
整理成shell脚本:
#!/bin/sh
processes = 'docker ps -q -f status=exited'
if [ -n "$processes" ];then
docker rm $processes
fi
2. 删除untagged images,即:id为<None>的image
docker rmi -f $(docker images -a |grep 'none'|awk '{print $3}')
说明:
docker images -a |grep 'none' 过滤出所有 none的镜像
docker images -a |grep 'none'|awk '{print $3}' 输出过滤后的镜像内容的第三列(即:image id)
6.Docker 基础网络配置
1.端口映射实现访问容器
从外部访问容器应用 -P或-p参数,指定端口映射,映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 traing/webapp python app.py
即:
可以通过 127.0.0.1:5000访问容器的应用
2.查看映射端口配置
docker port 容器name 或 容器_id 5000
3.容器互联实现容器间通信
--name 为容器自定义命名
docker run -d -p 8080:5000 --name web tranning/webapp java Test
通过 docker inspect 查看容器名字
docker inspect -f {{".RepoTags"}} 容器ID或容器名称
4.容器互联
#创建一个新的数据库容器
docker run -d --name db training/mysql
#删除之前创建的web容器
docker rm -f web
#创建新的web容器,并将它连接到db容器
docker run -d -p --name web --link db:db traning/webapp python app.py
解析:
此时db容器和web容器建立了互联关系
--link参数格式:
--link name:alias
name: 要连接的容器名称
alias:这个连接的别名
docker通过两种方式为容器公开连接信息
1.环境变量
2.更新 /etc/hosts文件
eg:
#用env命令来查看web容器的环境变量
docker run --rm --name web2 --link db:db traning/webapp env
7.Docker 之 mysql
1.拉取mysql镜像
docker pull mysql:5.6
2.运行mysql容器
#后台运行
docker run --name db001 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
#前台运行
docker run --name db001 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -ti mysql:5.6
解析:
容器名称:db001,mysql的root用户密码:root,
映射宿主机子的端口3306到容器端口3306,使用镜像 mysql:5.6
3.查看运行的容器
root@jayhe-ThinkPad-T450:/home/jayhe/jay/docker/my_images/jay_jdk8_tomcat8# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b392d3abc6 mysql:5.6 "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp db001
4.删除容器
docker rm $(docker ps -a|grep db001)
5.查看容器的端口映射关系
docker port 容器id或name
8.Docker之redis
1.拉取redis镜像
docker pull redis
2.启动容器
docker run --name redis-6379 -p 6379:6379 -ti redis:latest
解析:
容器名称:redis-6379,端口映射 宿主机 6379 对应容器 6379 , -ti 前端交互方式运行容器 , -d 参数:可指定容器后台运行
3.删除容器名称包含redis的容器
docker rm $(docker ps -a|grep redis)
4.宿主机安装redis
下载redis最新办tar.gz,解压后,找到路径,运行 make 命令
9.Docker之MongoDB
1.拉取MongoDB镜像
docker pull mongo:3.2.10
2.启动容器
#前台启动
docker run --name mongo_server1 -p 21117:27017 mongo:3.2.10
#后台启动
docker run --name mongo_server1 -d -p 21117:27017 mongo:3.2.10
3.本地连接到容器的mongodb数据库
root@jayhe-ThinkPad-T450:/home/jayhe/jay/soft/mongodb-linux-x86_64-3.2.6/bin# ./mongo -port 21117
4.Docker下创建MongoDB复制集群
参考:http://blog.csdn.net/pddddd/article/details/46893593
10.Docker之Tomcat
1.拉取Tomcat最新镜像
docker pull tomcat
2.启动Tomcat容器
#前台启动,端口映射为 18080 到 容器 8080,如果想作为后台服务启动,加 -d 参数
docker run -p 18080:8080 tomcat:latest
3.宿主机访问
http://localhost:18080