Docker 入门
什么是 Docker
启动
sudo systemctl start docker
sudo service docker start
重启
sudo service docker restart
查看状态
sudo systemctl status docker
sudo service docker status
停止
sudo systemctl stop docker
sudo service docker stop
Docker 能解决什么问题
Docker 操作
镜像操作
列出镜像列表
docker images
拉取镜像
docker pull gallopingvijay/mylinux:v1.0.0
提交镜像修改信息
docker commit -m'增加了gbd' -a="vijay" mylinux gallopingvijay/mylinux:v1.0.0
各个参数说明:
-m: 提交的描述信息
-a: 指定镜像作者
mylinux:容器名称,也可以为容器 ID
gallopingvijay/mylinux:v
1.0.0: 指定要创建的目标镜像名
推送镜像
docker push gallopingvijay/mylinux:v1.0.0
镜像详情
docker image inspect gallopingvijay/mylinux:v1.0.0
备份镜像
docker save -o backup.tar myimage
myimage 镜像名称,也可以带上标签如test
backup.tar 打包的包名称
加载tar文件中的镜像
加载tar文件中的镜像,将其添加到本地的镜像仓库中。(如果本地存在同名同标签镜像会被覆盖)
docker load -i backup.tar
创建一个镜像标签
docker tag <镜像名称>:<旧标签> <新标签>
其中,<镜像名称>是要标记的镜像的名称,<旧标签>是要为该镜像指定的旧标签,<新标签>是要为该镜像指定的新标签。
通过使用docker tag命令,可以为镜像创建多个不同的标签,以便在不同的场景中使用不同的标签来引用同一个镜像。这样可以方便地管理和使用镜像。
删除镜像
docker rmi gallopingvijay/mylinux:v1.0.0
删除全部镜像
docker rmi $(docker images -q)
强制删除全部镜像
docker rmi -f $(docker images -q)
删除tag为none的镜像
docker images|grep none|awk '{print $3}'|xargs docker rmi
容器操作
查看容器
// -a表示所有容器,不带-a表示运行中的
docker ps -a
运行容器
语法:
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: 绑定一个卷
实例:
// 启动一个容器
docker run -t -i gallopingvijay/mylinux:v1.0.0 /bin/bash
// 使用镜像 gallopingvijay/mylinux:v1.0.0,以后台模式启动一个容器,将容器的 80 端口映射到主机的 12345 端口,主机的目录 D:\docker\www映射到容器的 /www/wwwroot/,并指定名称为 mylinux
docker run -it -d -v D:\docker\www:/www/wwwroot/ -p 12345:80 -p 1111:8888 --name="mylinux" gallopingvijay/mylinux:v1.0.0
// 常用端口映射
docker run -it -d -v D:\wwwroot:/www/wwwroot/ -p 12345:80 -p 8887:8888 -p 887:888 -p 3305:3306 -p 442:443 -p 2222:22 -p 2221:21 -p 8081:8080 -p 9557:9507 --name="mylinux" gallopingvijay/mylinux:v1.0.0
再来一个:
// 可以看出,可以绑定多个 -v 等参数
docker run -d -v E:\wnmp\mysql-log:/var/log/mysql/ -v E:\wnmp\mysql-conf:/etc/mysql/ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6
启动容器
// 后面跟名称和ID都可以,下面的也是一样的
docker start mylinux
查看容器绑定和映射的端口及Ip地址
docker port mylinux
docker inspect mylinux|grep IPAddress
进入容器
docker exec -it xxx /bin/sh
docker attach 1e560fca3906
attach 命令如果exit,会导致容器的停止
停止一个容器
docker stop <容器 ID>
重启容器
docker restart 1e560fca3906
删除容器
docker rm -f 1e560fca3906
查看容器的日志
看实时日志 1e560fca3906 也可以是容器名称
docker logs 1e560fca3906 -f
启动所有镜像
docker start $(docker ps -a -q)
stop停止所有容器
docker stop $(docker ps -a -q)
remove删除所有容器
docker rm $(docker ps -a -q)
docker-compose 命令
构建(重新构建)
docker-compose build
启动容器
docker-compose up
后台启动并运行
docker-compose up -d
查看容器列表
docker-compose ps
查看日志(-f 一直监听)
docker-compose logs
关闭容器
docker-compose stop
启动容器
docker-compose start
重启容器
docker-compose restart
删除容器
docker-compose rm
进入容器
docker-compose exec xxx sh
xxx是容器名称
docker 容器内文件复制到本地
查看容器id
dockers ps -a
复制容器内文件到本地(容器ID也可以是容器名)
dockers cp 容器ID:目标路径 本地文件路径
复制本地文件到容器目录
dockers cp 本地文件路径 容器ID:目标路径