#下载docker
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
#启动docker
sudo systemctl enable docker
sudo systemctl start docker
#创建docker用户组
sudo groupadd docker
#将当前用户加入docker组
sudo usermod -aG docker $USER
设置远程阿里云镜像仓库:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像仓库链接"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像相关
查看已有的镜像
docker images
【-q】只显示image-id
移除镜像
docker image rm -f 镜像
docker image rm -f $(docker images -q) #删除全部镜像
从远程仓库拉取镜像到本地仓库
docker pull 镜像 不添加版本默认最新版本
docker pull redis:6.0.6 拉取指定版本
本地仓库镜像打包
docker save 镜像名/id:版本 -o 镜像包路径 (版本为latest好像不好用)
docker save 7614 -o redis-111.tar
/
# 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
docker save -o redis-111.tar redis:latest
打包之后的镜像就是一个文件
镜像包导入本地仓库
docker load -i 镜像包路径
从Dockerfile构建镜像
docker build -t 镜像名:版本 -f Dockerfile路径 上下文目录(里面存放了构建需要的文件,Dockerfile里面需要复制的文件都是以这个目录为当前目录的,且路径不能写出这个目录。)
容器相关
利用镜像创建并启动容器
docker run
【-d】(后台运行)
【-p 宿主机端口:容器所在OS端口】(宿主机端口和容器所在OS端口映射)
【--name 名字】(给容器命名)
【-v 宿主机目录绝对路径/任意别名:容器内目录路径】
(数据卷(volume),即宿主机目录和容器内目录进行绑定以同步。
如果宿主机目录路径是绝对路径,则创建容器时宿主机目录会覆盖容器内目录;如果是别名则会在创建容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中(/var/lib/docker/volumes/别名/_data)。)
【-e var=value】(传递需要的环境变量(参数))
镜像
【容器启动时执行的命令】(一般会有默认的命令)
需要绑定的文件:
nginx:配置文件 /etc/nginx/nginx.conf
数据文件 /usr/share/nginx/xxx
开启跟随docker自启动( --restart=always ),数据卷( -v /root/nginxconfig/nginx.conf:/etc/nginx/nginx.conf )
docker run -d -p 80:80 --name nginx --restart=always -v /root/nginxconfig/nginx.conf:/etc/nginx/nginx.conf nginx:1.20.2 (nginx负载均衡)
docker run -d -p 80:80 --name nginx --restart=always -v /root/html:/usr/share/nginx/html nginx:1.20.2 (nginx作为服务器)
nginx作为服务器和负载均衡
docker run -d -p 80:80 --name nginx --restart=always -v /root/html:/usr/share/nginx/html -v /root/nginxconfig/nginx.conf:/etc/nginx/nginx.conf nginx:1.20.2
redis:数据文件: 开启持久化后文件生成在容器中的/data中
配置文件(自己定义) 一般路径为
/etc/redis-6.0.6/redis.conf
开启跟随docker自启动( --restart=always ),AOF持久化( redis-server --appendonly yes )和数据卷( -v /root/redisdata:/data )
docker run -d -p 6379:6379 --name redis --restart=always -v /root/redisdata:/data redis:6.0.6 redis-server --appendonly yes
配置文件启动(最好新建配置文件,直接书写修改属性即可,不要全部替换)
docker run -d -p 6379:6379 --name redis --restart=always -v /root/redisconf:/data redis:6.0.6 redis-server /data/redis.conf
需要的环境变量(参数):
mysql:数据文件 /var/lib/mysql
MYSQL_ROOT_PASSWORD=密码(设置mysql中root的密码)
运行mysql
跟随docker自启动 : --restart=always
使用数据卷持久化宿主机 -v /root/data:/var/lib/mysql 或 mysqlData:/var/lib/mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=hmgsoft --name mysql --restart=always -v /root/mysqldata:/var/lib/mysql mysql:5.7.34
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=hmgsoft --name mysql --restart=always -v mysqlData:/var/lib/mysql mysql:5.7.34
数据库导出全部数据库数据dump
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
导出指定数据库
docker exec mysql sh -c 'exec mysqldump --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/库名.sql
导出指定数据库结构不要数据
docker exec mysql sh -c 'exec mysqldump --no-data --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/库名.sql
移除容器
docker rm -f 容器名
docker rm -f $(docker ps -aq) #移除所有容器
进入容器
docker exec -it 容器名/id bash
退出容器
exit
复制文件
docker cp 容器名/id:文件路径 文件路径 #从容器复制文件到宿主主机
docker cp 文件路径 容器名/id:文件路径 #从宿主主机复制文件到容器
查询容器
docker ps
【-a】(所有容器,包括运行的和没有运行的。)docker ps -a
【-q】(只显示容器id)docker ps -q
【-qa】(显示所有容器id)docker ps -qa
启动容器
docker start 容器名/id
停止容器
docker stop 容器名/id
重启容器
docker restart 容器名/id
暂停容器
docker pause 容器名/id
恢复容器
docker unpause 容器名/id
查看容器内运行进程
docker top 容器名/id
查看容器内应用的信息
docker inspect 容器名/id
将容器提交为镜像添加到本地仓库中
docker commit 容器名/id 镜像名:版本
查看日志
这里的日志就是应用的输出
docker logs
【-f】实时刷新
容器名/id
容器间通信(网桥):
1.docker中网络类型: bridge, host, null
2.创建网络自定义桥:
docker network create xxx (默认bridge 用 -d bridge 可更换())
3.查看网路:
docker network ls
4.查看某一个网络细节:
docker network inspect xxx
5.删除一个网络:
docker network rm xxx
6.运行多个容器在指定网络中:
a.启动命令中添加 --network xxx 指定网络桥
docker run --network xxx ......
b.启动后容器加入到某个网络中
docker network connect 网络名 容器id或名称
数据卷:
docker volumes ls
docker volume inspect 数据卷别名
docker volume rm 数据卷别名
docker volume create 数据卷别名