基本概念
一个 Docker Registry 中可以包含多个 仓库(Repository)
每个仓库可以包含多个标签(Tag),每个标签对应一个镜像
镜像
和容器
的关系,就像类
与对象
安装
# 更新相关软件 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker源 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update apt-cache policy docker-ce # 下面是安装信息: docker-ce: Installed: (none) Candidate: 18.06.1~ce~3-0~ubuntu Version table: 18.06.1~ce~3-0~ubuntu 500 500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages 18.06.0~ce~3-0~ubuntu 500 500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages 18.03.1~ce~3-0~ubuntu 500 500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages # 正式安装 sudo apt install docker-ce
# 查看运行状态 sudo systemctl status docker
|
基本使用
Docker也遵守Linux命令的格式
docker [option] [command] [arguments]
docker search ubuntu # 查找镜像 docker pull name # 下载image docker push # 推送镜像
|
docker run -i -t IMAGE /bin/bash # 启动交互式容器 docker inspect NAME # 查看详细信息? docker run --name=xxx -it IMAGE /bin/bash # 以xxx为名字运行 # CTRL + p + q => 退出并后台运行 docker attach 容器名 # 恢复到后台容器,更建议使用 docker exec?
# 查看守护进程 ps -ef | grep docker sudo status docker
docker top docker exec [-d][-i][-t] nginx # 为运行中的容器启动新进程 docker logs docker images #列出本地镜像 docker start CONTAINER #启动一个或多少已经被停止的容器 docker stop / kill CONTAINER #停止一个运行中的容器 docker restart CONTAINER #重启容器 docker rm CONTAINER #删除容器 -f 强制删除 docker rmi IMAGE #删除镜像 docker rmi $(docker images -q ubuntu) # 删除Ubuntu所有镜像 sudo systemctl daemon-reload #reload daemon.json sudo systemctl restart docker #重启docker
docker info # 查看信息 docker diff 容器名 # 查看改动信息
# 端口映射 docker run -p 80 -it # -i 标准输入保持打开 docker run -p 8080:80 -it # -t 为docker分配一个伪终端(pseudo-tty),并绑定到容器的标准输入 docker run -p 0.0.0.0:80 -it
# 查看端口映射情况 docker port docker_name
# 容器快照? # 导出容器 docker export ID > ubuntu.zip # 导入容器 cat ubuntu.zip | docker import - test/ubuntu:v1.0 # 通过URL导入 docker import http://xxx example/imagesrepo # 数据卷 docker volume create xxx docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash # ro设置只读权限 # 数据卷容器 docker run -it --name dv --volumes-from dvt4 ubuntu /bin/bash
# 复制文件到容器中 docker cp xxx id:/dir docker cp ./test apache:/var/www/ docker exec -it apache
|
部署实例
Nginx 部署流程
# 创建映射80端口的交互式容器 docker run -p 8080:80 --name web -it ubuntu /bin/bash # 安装Nginx apt update apt install - y nginx # 安装文本编辑器 vim apt install -y vim # 创建静态页面 cd /var/www/html touch index.html echo '<h1>Hello, Docker!</h1>' > index.html # 修改Nginx配置文件 whereis nginx # 找到安装目录 vim /etc/nginx/sites-enabled/default # 修改 root 目录 # 运行Nginx nginx # 验证网站访问 curl IP:port # ip 可用宿主机的IP加映射端口,也可以用 docker inspect web 查看真实容器IP
# 停止容器 docker stop web
# 启动 docker start -i web # 此时会发现,nginx已经停止 docker exec web nginx # 如果之前没有指定端口时,重新启动时 port 将发生变化
|
sqli-labs Docker
构建镜像
# 通过容器构建 docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]] docker commit \ --author "Tao Wang <twang2218@gmail.com>" \ --message "修改了默认网页" \ webserver \ nginx:v2 # !慎用 docker commit
# 使用dockerfile构建镜像 —— 包括一系列命令的文件,类似shell脚本? dockerfile编写语法 # 注释
docker build # 构建镜像
|
优化体验
配置 Docker 加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io sudo systemctl restart docker.service # 重启 Docker 生效
docker info # 包含以下信息,加速器配置成功 Registry Mirrors: http://f1361db2.m.daocloud.io/
|
Docker不使用sudo
将用户添加到 docker 用户组
sudo usermod -aG docker $USER # 先试这个
cat /etc/group | grep docker # 查找 docker 组,确认其是否存在 groups # 列出自己的用户组,确认自己在不在 docker 组中
# 如果 docker 组不存在,则添加之: sudo groupadd docker
# 将当前用户添加到 docker 组 sudo gpasswd -a ${USER} docker
# 重启服务 sudo service docker restart
# 切换一下用户组(刷新缓存) newgrp - docker; newgrp - `groups ${USER} | cut -d' ' -f1`; # TODO:必须逐行执行,不知道为什么,批量执行时第二条不会生效 # 或者,注销并重新登录 pkill X
|