赞
踩
目录 start
目录 end|2020-01-28 17:29|
Official Doc | docker-cn
Docker中国
Docker 是一个开源的应用容器引擎
理解为加强版虚拟机docker images
来得到所有的本地镜像名
docker run --name {name} -d {image-name}
新命名一个容器来启动某个镜像docker ps
查看容器运行状况docker tag 原名 新名
用户名/镜像名:tag
registry.cn-hangzhou.aliyuncs.com/myth/jdk8:alpine
jdk8是镜像名,前面的是仓库地址啥都不说了, 直接干
17.05+
Official doc
所有的发行版
docker.io 是旧版本 现在新的Docker分为 docker-ce docker-ee
注意 Deepin上 如果通过 apt 去安装 docker-compose 它会把 docker-ce 卸掉, 装旧的 docker.io
这两种方式装的是同一个版本号
sudo dpkg -i deb文件
sudo docker run hello-world
sudo apt install docker-ce
snap
sudo apt install snapd
snap install find
snap install docker
sudo echo "deb http://http.debian.net/debian jessie-backports main" >> /etc/apt/sources.list
sudo apt-get install docker-ce
前置软件
sudo apt-get install 使用阿里云镜像源
- 特别注意
lsb_release -cs
命令的执行结果, 本应该获取到的是发行代号 jessie stretch 等等, 但是Deepin15.8执行结果是 unstable …- 所以要手动添加 或修改为 jessie
deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian jessie stable
使用官方源
sudo yum install docker
service docker start
设置开机启动: chkconfig docker on
pacman -S docker
sudo groupadd docker
sudo gpasswd -a $USER docker
Windows上本质是用了VirtualBox创建虚拟机来跑Docker, 屎一般的体验, 然而Win10的WSL因为不能模拟aufs 以及 cgroup 所以能装不能用
只能装上docker for windows 然后把Docker守护进程的套接字文件配置给wsl用。。。。。
docker run hello-world
有正常输出即可docker 所有的数据默认存储在
/var/lib/docker
默认的DockerHub因为在国外所以网络不太稳定
Docker中国
三种使用的方式
docker pull registry.docker-cn.com/myname/myrepo:mytag
docker --registry-mirror=https://registry.docker-cn.com daemon
/etc/docker/daemon.json
文件, 永久性更改 {"registry-mirrors": ["https://registry.docker-cn.com"]}
时速云
sudo docker pull index.tenxcloud.com/<namespace>/<repository>:<tag>
docker tag index.tenxcloud.com/docker_library/node:lastest node:lastest
阿里云
百度云
登录百度云镜像仓库
开通镜像仓库时填写的用户名
。输入密码后完成登录。上传镜像
下载镜像
使用加速器
v1
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
docker tag 镜像 ip:port/镜像名
curl http://IP:5000/v1/search
v2
docker run -d -p 5000:5000 --name registry registry:2
curl IP:5000/v2/_catalog
注意 由于 docker client 默认是用的 HTTPS 方式通信, 但是这个本地的 registry 默认是 HTTP 的, 所以有几种解决方案
DOCKER_OPTS="--insecure-registry ip:port"
{ "insecure-registries":["IP:PORT"] }
直接运行 docker, 就会有命令的使用提示 例如查看docker版本
docker version
登录镜像仓库
docker login
或者 docker login -u username -p password
sudo docker login index.tenxcloud.com
docker login --username=[username] hub.baidubce.com
docker images
docker search 镜像名
docker pull 镜像名
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 stats
能看到正在运行的容器内存 cpu io net等信息
-a
所有容器--no-stream
不阻塞标准输出流,只输出一次信息停止容器:docker stop 容器name
重启容器:docker restart 容器name
启动容器:docker start 容器name
删除容器:docker rm 容器name
-f
强行停止正在运行的容器并删除-l
删除容器的连接,但是保留容器-v
删除容器挂载的数据卷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 ps
docker ps -a
docker ps -s
.ID Container ID
.Image Image ID
.Command Quoted command
.CreatedAt Time when the container was created.
.RunningFor Elapsed time since the container was started.
.Ports Exposed ports.
.Status Container status.
.Size Container disk size.
.Names Container names.
.Labels All labels assigned to the container.
.Label Value of a specific label for this container. For example '{{.Label "com.docker.swarm.cpu"}}'
.Mounts Names of the volumes mounted in this container.
.Networks Names of the networks attached to this container.
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
-p 44:22/udp
--env name="tanky"
设置环境变量--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
内存限制
--memory 100M
或者 -m 100M
--memory-swap -1
登录容器:
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镜像查看容器的端口映射情况, 输出是左容器右本机, 和使用相反
-P
或 -p
参数来开放
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
数据卷是一个可供容器使用的特殊目录,它将宿主机操作系统目录映射进容器 类似于 mount操作
docker run -v dir:dir[:ro]
一般是创建容器时使用,和-p类似可以多个,左本机右容器 默认rw权限可以指定 ro只读
挂载宿主机时区及时间 /etc/localtime:/etc/localtime
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
声明式环境,管理多容器, 并处理好相关资源的关系
sudo pip install docker-compose
一个配置文件就表示了一组容器, 以及相关的网络,文件等配置, docker-compose 都是基于该配置文件进行基本命令操作
语法上和 docker run 基本一致, 只不过以 yml 形式配置而已
version: "2.1"
services:
zookeeper:
image: ${IMAGE_NAME:-defaultImage}
expose:
- "6666"
ports:
- "6666:6666"
volumes:
- /etc/localtime:/etc/localtime
command: ./bin/start.sh
links:
- "mysql:mysql"
environment:
- NAME=who
必须要在 docker-compose.yml 文件目录下执行
创建
服务,启动服务,并关联服务等操作, -d
后台执行删除
该服务的所有容器, 移除网络, -v
移除挂载的volumeyml所在的目录名会作为容器名的前缀
创建一个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”
Official Doc 分为 none host brige user-defined 几种类型
docker run -it --network none busybox
docker run -it --network host busybox
安装 Docker 的时候, 都会创建一个 docker0 的网桥 Linux bridge
--network
或者使用 --network default
创建容器 都会默认挂载到 docker0 上docker network inspect bridge
命令可以看到子网掩码是 172.17.0.0/16
网关是 172.17.0.1
注意: 此方式下容器之间是互通的, 通常使用的
--link containerName:aliasName
也只不过是在 /etc/hosts 文件中添加了容器的 dns 而已
特别容易出现锁,一个没有启动,其他的都启动不了 尝试?
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; } }
weave
能解决跨宿主机的容器互联问题
Docker 提供三种 网络驱动 bridge overlay macvlan, 后两者可用于跨主机的容器通信
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。