目录 start
目录 end
|2018-05-23| 码云 | CSDN | OSChina
Docker 是一个开源的应用容器引擎
理解为加强版虚拟机docker images
来得到所有的本地镜像名
docker run --name {name} -d {image-name}
新命名一个容器来启动某个镜像docker ps
查看容器运行状况docker tag 原名 新名
用户名/镜像名:tag
registry.cn-hangzhou.aliyuncs.com/myth/jdk8:alpine
jdk8是镜像名,前面的是仓库地址snap
sudo apt install snapd
snap install find
snap install docker
Ubuntu或者Deepin
sudo apt install docker.io
debian 8
sudo echo "deb http://http.debian.net/debian jessie-backports main" >> /etc/apt/sources.list
sudo apt-get install docker.io
yum
sudo yum install docker
service docker start
设置开机启动: chkconfig docker on
Debian系
这两种方式装的是同一个版本号
sudo dpkg -i deb文件
sudo docker run hello-world
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo apt-get purge docker-ce
sudo rm -rf /var/lib/docker
docker run hello-world
有正常输出即可boot2docker ssh
默认的DockerHub因为在国外所以慢,不太稳定
时速云:
sudo docker pull index.tenxcloud.com/<namespace>/<repository>:<tag>
docker tag index.tenxcloud.com/docker_library/node:lastest node:lastest
阿里云:
推荐 相关文档
登录百度云镜像仓库
$ sudo docker login --username=[username] hub.baidubce.com
username:镜像仓库名称,即是
开通镜像仓库时填写的用户名
。输入密码后完成登录。
上传镜像
$ sudo docker tag [ImageId] hub.baidubce.com/[namespace]/[ImageName]:[镜像版本号]
$ sudo docker push hub.baidubce.com/[namespace]/[ImageName]:[镜像版本号]ImageId和镜像版本号根据镜像信息补充
namespace是开通镜像仓库时填写的命名空间
ImageName是在控制台创建的镜像名称
下载镜像
登录到镜像仓库,需输入密码
$ sudo docker pull hub.baidubce.com/[namespace]/[ImageName]:[镜像版本号]
使用DockerHub加速器
docker软件源地址:https://mirror.baidubce.com
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
docker tag 镜像 ip:port/名字
curl http://IP:5000/v1/search
docker login
或者 docker login -u username -p password
sudo docker login index.tenxcloud.com
docker login --username=[username] hub.baidubce.com
docker search 镜像名
docker pull 镜像名
docker images
docker rmi 镜像名
docker inspect [-f {{".Architesture"}}]
-f 查看JSON格式的具体节点的数据值docker history imagename
docker tag originname newname
docker save -o ubuntu.tar ubuntu:14.04
docker load --input ubuntu.tar
或 docker load < ubuntu.tar
docker push mythos/test:lastest
查看当前运行的容器:docker ps
docker ps -a
docker ps -s
查看所有容器的状态:docker stats
能看到正在运行的容器内存 cpu io net等信息
-a
所有容器--no-stream
不阻塞标准输出流,只输出一次信息停止容器:docker stop 容器name
重启容器:docker restart 容器name
启动容器:docker start 容器name
删除容器:docker rm 容器name
docker rm ${docker -a -q}
docker system prune --volumes -f
容器日志(终端所有输入输出):docker logs 容器name或id
重命名 : docker rename origin new
导入导出 (容器快照):
docker export -o test.tar 容器名
docker export 容器name > test.tar
docker import [-c |--change=[]] [-m | --message=[]] file|URL - [repository]:[tag]
Docker run 命令的使用方法 等价于 docker create 再 docker start
docker run -d --name conrainer-name image-name touch a.md
,如果镜像本地没有会自动pull
--name
配置容器名字-d
后台启动程序-i
交互模式运行容器(标准输入和标准输出) docker run -it ubuntu /bin/bash
-t
容器启动后进入其命令行-v
将本地文件夹建立映射到容器内 -v 本机:容器
-p
端口映射左本机右容器:-p 44:22
主机容器端口相同就:-p 22
将容器所有EXPOSE的端口映射到宿主机随机端口-P
-f
文件?--env name="tanky"
设置环境变量--memory
限制最大内存--cpu-shares
设置CPU的相对权重,只在link之间容器的权重比例--cpuset-cpus
限制只能运行在某标号的CPU上--user
-u 限制用户--cap-drop
去除能力--link
链接其他容器--rm
容器运行结束退出就自动删除该容器 注意和-d
不能共存--restart=always
设置该容器随dokcer 服务自启动--hostname 容器hostname
指定容器的hostname-e TZ="Asia/Shanghai"
指定时区,可以解决时间不一致-v /etc/localtime:/etc/localtime:ro
设置容器的时钟和宿主机一致,不一定有用
docker create
是创建一个容器,不会运行,docker run
是运行命令在一个新容器里
登录容器:
docker exec -it 容器name或id bash
docker attach 容器id
这个命令虽然简单,但是退出会话就自动关闭了容器这些选项不加就是默认值,加上短参数形式就是设为另一个值 如 -t
-i
,--interactive=ture|false
打开标准输入接受用户输入命令--privileged=true|false
是否给以最高权限-t
,--tty=true|false
是否分配伪终端-u
,--user=""
执行命令的用户或ID使用 nsenter 连接到容器:
docker commit 容器id 镜像name
将容器为id的当前容器 保存为name镜像查看容器的端口映射情况, 输出是左容器右本机, 和使用相反
数据卷是一个可供容器使用的特殊目录,它将宿主机操作系统目录映射进容器 类似于 mount操作
docker run -v dir:dir[:ro]
一般是创建容器时使用,和-p类似可以多个,左本机右容器 默认rw权限可以指定 ro只读
docker run -it -v /test --name data ubuntu
运行一个挂载了数据卷的容器docker run -it --volumes-from data --name db1 ubuntu
docker run -it --volumes-from db1 --name db2 ubuntu
--volumes-from
参数所挂载数据卷的容器并不需要保持在运行状态docker rm -v
来声明删除容器并删除关联的数据卷利用数据卷容器来迁移数据
docker run --volumes-from data -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /data
docker run -v /data --name reuse ubuntu /bin/bash
docker run --volumes-from reuse -v $(pwd):/backup busybox tar xvf /backup/backup.tar
IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort
IP:HostPort:ContainerPort
IP::ContainerPort
HostPort:ContainerPort
docker run -d -p 127.0.0.1::5000/udp ubuntu apt update
docker port ubuntu17 5000
docker inspect 容器id
让多个容器中应用快速安全交互的方式,特别注意这是双向互联的 特别容易出现锁,一个没有启动,其他的都启动不了 尝试?
sudo service docker restart
创建一个MySQL容器供一个Ubuntu容器使用
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=ad -d mysql
docker run -d --name test --link mysql2:db ubuntu
--link name:alias
在父容器中会将该映射加入host文件,所以无需找ip,直接使用别名mysql -h db -u root -pad
即可连接上mysql
cat /etc/hosts
中myslq容器别名为db值的IP地址ping db
apt install inetutils-ping
ifconfig就要安装net-tools
创建一个Nginx和一个Springboot搭建的web服务
docker run --name youhuigo -d -p 80:80 -v /home/kuang/nginx/conf/:/etc/nginx/conf.d/:ro --link you:web nginx
一样的cat /etc/hosts 查看容器的IP
, 其实最简单就是用link配置时的别名即可,因为Docker已经帮我们配置好了host。。。upstream youhui {
server 172.17.0.4:8888;
}
server {
listen 80;
server_name youhui;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxt true;
proxy_pass http://youhui;
proxy_redirect off;
}
}
声明式环境,管理多容器, 并处理好相关资源的关系
sudo pip install -U docker-compose
创建一个docker集群环境 官方文档安装
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
远没有前面的容器互联那样的简单, 更多还需学习
weave
能解决跨宿主机的容器互联问题
frolvlad/alpine-oraclejdk8 slim
postgres alpine
alpine