Docker笔记
docker命令大全(https://www.runoob.com/docker/docker-command-manual.html)
https://alanhou.org/docker-compose/
安装
安装docker
#法一
#国内推荐
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#国外推荐
curl -fsSL https://get.docker.com | bash -s docker --mirror
#法二,推荐
apt-get install docker.io docker-compose -y
安装docker-compose
docker-compose是基于docker的快捷容器管理工具,可以通过yaml文件快捷管理docker容器,使用时要先安装docker,后安装docker-compose工具
sudo apt install python3-pip -y
#国内推荐
sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
#国外推荐
sudo pip3 install docker-compose
报错:Command "python setup.py egg_info" failed with error code
解决:
pip3 install --upgrade setuptools
python3 -m pip install --upgrade pip
配置国内源
https://github.com/silenceshell/docker_mirror 查找国内最快的docker镜像源
自动配置(问题比较多)
git clone https://github.com/silenceshell/docker_mirror.git
#python2环境
sudo apt install python-pip
sudo pip2 install docker -i https://mirrors.aliyun.com/pypi/simple
sudo python ./docker_mirror.py
手动配置
配置docker为国内源
vim /etc/docker/daemon.json # 没有就创建
{
"registry-mirrors": [
"https://mirror.baidubce.com/",
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com/"
]
}
sudo systemctl daemon-reload
sudo service docker restart
sudo docker info # 查看是否更换成功
docker语法
docker -h
标志速记 -h 已被弃用,请使用 --help
用法:docker [OPTIONS] 命令
容器的自给自足运行时
>选项:
--config string 客户端配置文件的位置(默认“/root/.docker”)
-D, --debug 启用调试模式
-H, --host list要连接到的守护程序套接字
-l, --log-level string 设置日志记录级别 ("debug"|"info"|"warn"|"error"|"fatal") (default "info ")
--tls 使用 TLS; --tlsverify
隐含 --tlscacert string 仅由该 CA 签名的信任证书(默认为“/root/.docker/ca.pem”)
--tlscert string TLS 证书文件的路径(默认为“ /root/.docker/cert.pem")
--tlskey 字符串 TLS 密钥文件的路径(默认为“/root/.docker/key.pem”)
--tlsverify 使用 TLS 并验证remote
-v, --version 打印版本信息并退出
管理命令:
builder 管理构建
config 管理Docker配置
container 管理容器< br/> engine 管理docker引擎
image 管理镜像
network 管理网络
node 管理Swarm节点
plugin 管理插件
secret 管理Docker secrets
service管理服务
栈管理Docker堆栈
群管理群
系统管理Docker
信任管理对Docker镜像的信任
卷管理volu mes
命令:
attach 将本地标准输入、输出和错误流附加到正在运行的容器
build 从 Dockerfile 构建图像
commit 创建一个新图像从容器的更改
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建一个新容器
diff 检查容器文件系统上文件或目录的更改
events Get来自服务器的实时事件
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为 tar 存档
history 显示图像的历史
images 列出图像< br/> import 从 tarball 导入内容以创建文件系统映像
info 显示系统范围的信息
inspect 返回有关 Docker 对象的低级信息
kill 杀死一个或多个正在运行的容器< br/> load 从 tar 存档加载图像 o r STDIN
login 登录到 Docker 注册表
logout 从 Docker 注册表注销
logs 获取容器的日志
pause 暂停一个或多个容器中的所有进程<br /> port 列出容器的端口映射或特定映射
ps 列出容器
pull 从注册表中拉取图像或存储库
push 将图像或存储库推送到注册表
/> rename 重命名容器
restart 重启一个或多个容器
rm 删除一个或多个容器
rmi 删除一个或多个图像
run 在新容器中运行命令
/> save 将一个或多个图像保存到 tar 存档(默认流式传输到 STDOUT)
search 在 Docker Hub 中搜索图像
start 启动一个或多个停止的容器
stats 显示实时流of container(s) 资源使用统计
stop 停止一个或多个 r unning containers
tag 创建一个引用 SOURCE_IMAGE 的标签 TARGET_IMAGE
top 显示容器的运行进程
unpause 取消暂停一个或多个容器内的所有进程
update 更新一个或多个容器的配置更多容器
版本显示Docker版本信息
等待阻塞直到一个或多个容器停止,然后打印它们的退出代码
运行'docker COMMAND --help'以获得更多信息一个命令。
docker run :创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷,格式为 系统目录:容器目录
--rm 容器停止时,自动删除该容器
–privileged 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
chroot /mnt 把根目录换成/mnt
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
语法
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
实例
启动已被停止的容器myrunoob
docker start myrunoob
停止运行中的容器myrunoob
docker stop myrunoob
重启容器myrunoob
docker restart myrunoob
docker kill :杀掉一个运行中的容器。
语法
docker kill [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-s :向容器发送一个信号
实例
杀掉运行中的容器mynginx
runoob@runoob:~$ docker kill -s KILL mynginx
mynginx
docker 常用命令
#docker创建容器(名称testname,挂载文件夹)
docker run -it --name="testname" -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
#docker常用创建容器
docker run -d --name="redis" -p 6379:6379 redis
#查看docker网络:
docker network list
#查看容器信息:
docker inspect 容器id
#docker创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 自定义name
#docker 进入容器
docker exec -it 容器name /bin/bash
#docker 查看所有容器
docker ps -a
#docker 关闭容器
docker stop <id>
#docker 删除容器(删除前必须关闭容器)
docker rm <ports/names>
#docker 查看镜像
docker images
#docker 删除镜像
docker image rm <IMAGE ID>
#docker宿主机向容器传输文件
docker ps -a
docker inspect -f '{{.Id}}' 容器名字
docker cp index.php 3def7287ad59e336eca6fef6596c0bf72cbcba271befa375645c934616193d9e:/var/www/html/index.php
docker-compose 常用命令
docker-compose up -d nginx 构建建启动nignx容器
docker-compose exec nginx bash 登录到nginx容器中
docker-compose down 删除所有nginx容器,镜像
docker-compose ps 显示所有容器
docker-compose restart nginx 重新启动nginx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
docker-compose build nginx 构建镜像 。
docker-compose build --no-cache nginx 不带缓存的构建。
docker-compose logs nginx 查看nginx的日志
docker-compose logs -f nginx 查看nginx的实时日志
docker-compose config -q 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx 以json的形式输出nginx的docker日志
docker-compose pause nginx 暂停nignx容器
docker-compose unpause nginx 恢复ningx容器
docker-compose rm nginx 删除容器(删除前必须关闭容器)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 启动nignx容器
docker网络详解
docker修改容器启动参数
方法一. update 命令
eg:
docker container update --restart=always 容器名字
方法二. 修改container的配置文件
先停止容器
- 停止docker:
systemctl stop docker
- 修改配置文件,配置文件路径为
/var/lib/docker/containers/容器ID
,对应的配置文件为hostconfig.json
和config.v2.json
- 启动docker:
systemctl start docker
- 启动容器
*注意,重启docker很重要,否则修改完的配置文件,重启容器后会被还原*
故障解决:
Linux Docker systemctl 命令无法使用的解决方案
据说在 Linux Docker \text{Linux Docker}Linux Docker 中无法使用 systemd(systemctl)相关命令的原因是 0号进程不是 init,而是其他例如 /bin/bash,所以导致缺少相关文件无法运行。
具体的解决方案是通过 init \text{init}init 在后台运行一个 docker 容器,然后再通过 exec 的方式进入到容器中,不过需要注意的是不同的系统 init程序的路径不同。
例如 CentOS 7,
docker run -tid --name test_1 --privileged=true centos:latest /usr/sbin/init
docker exec -it test_1 /bin/bash
再例如 Ubuntu 16.04 \text{Ubuntu 16.04}Ubuntu 16.04,
docker run -tid --name test_2 --privileged=true ubuntu:16.04 /sbin/init
docker exec -it test_2 /bin/bash
需要注意的是,第一个命令除了要通过 init \text{init}init 后台启动 docker \text{docker}docker 容器以外,–privileged=true \text{--privileged=true}–privileged=true 是必须的。
快速开始
启动redis
docker pull redis:5.0.14
docker run --name="redis" -d -p 6379:6379 redis:5.0.14
docker exec -it redis redis-cli
>config set requirepass pwd