容器
yum install docker #根据提示安装yum
apt install docker #根据提示安装docker
docker run ubuntu:15.10 /bin/echo “hello world” #运行ubuntu15.10镜像形成容器,并在容器里执行hello world ,如果没有镜像会去下载
docker run -it ubuntu:15.10 /bin/bash #运行交互式的容器,通过-i(伪终端)-t(交互)让docker运行的容器实现对话的能力,一个容器相当于一个linux操作系统,和其它容器和宿主机没有关系
root@54654231346dfjds:/# #进入了ubuntu系统的容器内部
cat /proc/version #查看当前系统版本
exit 或 ctrl + D #退出容器
docker ps #查看正在运行的容器
docker stop ubuntu:15.10 #停止容器
docker 会列出许多使用方法 docker stats --help 命令使用方法
docker pull ubuntu #获取镜像
docker run -it ubuntu /bin/bash #运行容器并进入交互式终端
docker ps -a #查看所有的容器
docker start b750bbbcfd88 #启动一个已停止的容器
docker run -itd --name ubuntu-test ubuntu /bin/bash #-d后台运行容器
docker attach
docker exec 后台时的容器,想进去用这两个随意一个,推荐第二个,因为它退出容器终端,不会导致容器停止
docker attach b750bbbcfd88
docker exec -it b750bbbcfd88 /bin/bash
docker stop 容器id #停止一个容器
docker restart 容器id #重启容器
docker export b750bbbcfd88 > ubuntu.tar #导出本地某个容器
cat docker /ubuntu.tar | docker import - test/ubuntu:v1 #使用docker import 从容器快照文件中在导入为镜像,以下实例将快照文件ubuntu.tar导入到镜像test/ubuntu:v1
docker rm -f b750bbbcfd88 #删除容器
docker container prnue #清理掉所有处于终止状态的容器
运行web应用
docker pull training/webapp #载入镜像
docker run -d -p training/webapp python app.py #-d后台 -p将容器内部使用的网络端口映射到我们使用的主机上
docker ps
docker run -d -p 5000:5000 training/webapp app.py #容器内部的端口映射到本地主机上
查看端口映射情况可以docker ps查看全部,也可以查看指定容器
docker port b750bbbcfd88 或 docker port joker-name
docker logs id名字 #查看web应用程序日志
docker logs -f b750bbbcfd88 #-f是标准输出
docker top name 或 docker top b750bbbcfd88 #查看容器内部容器运行的进程
docker inspect #查看docker的底层信息,返回一个json文件,记录docker容器的配置和状态信息
docker stop name #停止web应用容器
docker start name #重启web应用容器
docker ps -l #查询最后一次创建的容器
docker restart #重启docker
docker rm name #移除web应用容器,移除前必需停止容器,否则会报错
docker -v #查看docker是否安装正确
linux环境配置:
pwd :查看路径
sudo find / -name xxx
sudo gedit ~/.profile
文件末尾添加:
export PATH="$PATH:your path"
重启生效
启动docker:service docker start
停止docker:service docker stop
重启docker:service docker restart
查看docker状态:service docker status
开机启动:chkconfig docker on
查看docker概要信息:docker info
查看docker帮助文档:docker --help
错误:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
解决方法:sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
或,用sudo来执行命令也可以
配置加速原
cd /etc/docker
vim daemon.json
{
“registry-mirrors”:[“https://m9r2r2uj.mirror.aliyuncs.com”]
}
保存退出
重启docker服务
service docker restart
下载镜像 :docker pull java:8
列出镜像 :docker images
删除本地镜像 :docker rmi java
新建并启动容器:docker run -d -p 91:80 nginx
镜像
docker images #列出镜像列表
docker run -it ubuntu:15.10 /bin/bash #运行指定版本镜像
docker pull ubuntu:13.10 #获取一个新的镜像
docker search httpd #查找镜像
docker rmi ubuntu #删除镜像
创建镜像方法:当下载的镜像不满足需求时1.从已经创建的容器中更新镜像,并且提交这个镜像 2.使用dockerfile指令来创建一个容器
更新镜像前,需要使用镜像来创建一个容器 docker run -it ubuntu:15.10 /bin/bash
在运行的容器内使用apt-get update命令进行更新
在完成操作后使用exit命令来退出这个容器
使用docker commit来提交容器副本
docker commit -m=“has update” -a=“runoob” b750bbbcfd88 runoob/ubuntu:v2 #-m提交的描述信息 -a指定镜像作者 b750bbbcfd88容器id runoob/ubuntu:v2指定要创建的目标镜像名
docker run -it runoob/ubuntu:v2 /bin/bash #启动新镜像
构建
cat Dockerfile
docker build -t runoob/centos:6.7 #-t指定要创建的目标镜像名 .:Dockerfile文件所在目录,可以指定Dockerfile的绝对路径
docker images
docker run -it runboot/centos:6.7 /bin/bash #创建容器
id runboot
docker tag b750bbbcfd8 runboot/contos:dev #为镜像添加一个新的标签dev id是相同的
网络端口映射 TCP
docker run -d -P training/webapp python app.py #创建一个python应用的容器
docker ps
docker run -d -P 5000:5000 training/webapp python app.py
docker ps
docker run -d -P 127.0.0.1:5001:5000 training/webapp python app.py #这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口
UDP
docker run -d -P 127.0.0.1:5001:5000/udp training/webapp python app.py
docker ps
docker port name 5000 #查看端口绑定情况
容器互联
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
docker run -d -P --name runoob training/webapp python app.py #命名容器
docker ps -l
docker network create -d bridge test-net #创建一个新的docker网络 -d指定docker网络类型,有bridge,overlay
docker run -itd --name test1 --network test-net ubuntu /bin/bash #运行一个容器连接到新建的test-net网络
docker run -itd --name test2 --network test-net ubuntu /bin/bash #打开新的终端,再运行一个容器加入到test-net网络
ping一下查看是否容器互联
如果没有ping命令执行 apt-get update apt install iputils-ping
如果你有多个容器之间需要互相连接,推荐使用 Docker Compose
配置DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
“dns” : [
“114.114.114.114”,
“8.8.8.8”
]
}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
$ docker run -it --rm ubuntu cat etc/resolv.conf
如果只想在指定的容器设置 DNS,则可以使用以下命令:
$ docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
参数说明:
–rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
docker仓库管理
来自docker hub
docker login
docker logout
docker sraech ubuntu
docker pull ubuntu
docker push #将自己的镜像推送到docker hub
docker tag 账号/ubuntu:18.04
docker images ls
docker push 账号/ubuntu:18.04
docker search 账号/ubuntu
dockerfile
他是用来构建镜像的文本文件,文本内容包括一条条构建镜像所需的指令和说明
下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)
在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容
mkdir Dockerfile
cd Dockerfile
vi Dockerfile
cat Dockerfile
FROM nginx
RUN echo ‘这是一个本地构建的nginx镜像’ > /usr/share/nginx/html/index.html
docker compose
docker-compose up #启动应用程序
docker-compose up -d #后台