代码拉取完成,页面将自动刷新
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,任意系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。
#下载docker
#1.下载简化安装脚本
curl -fsSL get.docker.com -o get-docker.sh
#2.使用脚本安装Docker 并指定其镜像源为aliyun
sudo sh get-docker.sh --mirror Aliyun
#启动docker
#1.开机自启动
sudo systemctl enable docker
#2.启动docker
sudo systemctl start docker
#创建docker用户组
sudo groupadd docker
#将当前用户加入docker组
sudo usermod -aG docker $USER
#判断是否下载好了(任选其一)
#1.会输出服务端和应用端docker版本号
docker version
#2.会输出docker消息
docker info
#3.如过没有该镜像会下载该镜像并创建启动该容器打印出 hello world
# 若已存在 则 执行创建容器并启动容器打印 hello world
# 由此可以得知其流程 有直接运行 无去中央仓库下载
docker run hello-world
用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置,有远程和本地仓库之分。
本地仓库
设置远程阿里云镜像仓库
1.获取镜像仓库地址
登陆阿里云控制台--->搜索容器镜像服务–-->镜像加速器–-->获取加速器地址
2.设置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像仓库链接"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
拉取镜像:
docker pull ubuntu:20.04:拉取一个镜像
查找镜像:
docker images:列出本地所有镜像
docker images redis [-a]: 列出本地所有reids镜像 -a 为默认参数
docker images redis -q: 列出本地所有reids镜像id
删除镜像:
(正常删除 没有运行过的镜像)
docker image rm ubuntu:20.04(没有运行过的) 或 docker rmi ubuntu:20.04:删除镜像ubuntu:20.04
(强制删除 连镜像容器全删除了)
docker image rm -f ubuntu:20.04
(批量删除)
docker image rm -f $(docker images redis -q) 删除本地redis所有的版本
创建镜像
docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像
docker save -o ubuntu_20_04.tar ubuntu:20.04:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中
docker load -i ubuntu_20_04.tar:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
docker ps -a:查看本地的所有容器
docker ps :查看本地所有运行的容器
创建容器
docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。
创建并启动容器:
基础操作
docker [contaienr] run(容器内无法访问)
docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器
映射端口
docker [contaienr] run -p 8080【宿主机】:8080【服务机】 tomcat:8.0 : 启动一个容器并使得服务机端口8080映射到宿主机端口8080 【防火墙在docker启动后不要变化否则报错见问题1】
后台启动
docker [contaienr] run -p 8080【宿主机】:8080【服务机】-d tomcat:8.0 :后台启动一个容器并使得服务机端口8080映射到宿主机端口8080
指定容器名称
docker [contaienr] run -d -p 8080【宿主机】:8080【服务机】--name mytomcat tomcat:8.0 :
后台启动一个容器并使得服务机端口8080映射到宿主机端口8080且名称为mytomcat
docker [container] start CONTAINER:启动容器
docker [container] stop CONTAINER:停止容器
docker [container] restart CONTAINER:重启容器
docker [container] pause CONTAINER:暂停容器
docker [container] unpause CONTAINER:恢复容器
docker [container] kill id|name: 杀死容器
docker [container] rm CONTAINER:删除容器
docker rm $(docker ps -qa): 删除所有容器
docker container prune:删除所有已停止的容器
docker [container] logs [OPTIONS]
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
docker [container] attach id|name:进入容器
#和容器的bash进行交互
docker [container] exec -it【交互模式】 id|name bash: 进入容器
docker top 容器id|name
docker inspect 容器id|name
docker cp id|name:/文件或目录 主机文件存放位置: 容器指定文件和目录到宿主机
docker cp 主机文件存放位置 id|name:/文件或目录: 宿主机到容器指定文件和目录
docker [container] exec CONTAINER COMMAND:在容器中执行命令
挂起容器 注意 ctrl -d 会关闭容器
先按Ctrl-p,再按Ctrl-q可以挂起容器
#实现容器数据与宿主机数据映射 (存储数据的容器一般要使用如redis mysql ...)
#注意: 容器首次启动时设置
#使用:
#1.绝对路径设置数据卷
#注意:会将容器路径的原始内容清空,始终以宿主机为主
docker run -v 宿主机绝对路径:容器内路径 (image) [OPTION]
-ro only read(只读) 只能设置容器
docker run -d -p 8081:8080 --name mycat1 -v /usr/local/docker/test/:/usr/local/tomcat/webapps/aa tomcat:8.5.84-jdk8-corretto-al2
docker run -d -p 8080:8080 --name mytomacat -v /root/apps/:/usr/local/tomcat/webapps:ro
#2.别名方式设置数据卷
docker run-v aa:/user/local/tomcat/webapps [image]
#aa : 1.docker 数据卷别名 存在则直接使用不存在则自动创建
# 2.使用别名保存容器原始内容前提是对应路径不能存在内容
#
# find / -name aa
#其内容默认在 /var/lib/docker/volumes/
#3.别名到底是什么?
代表docker自身维护数据卷
#4.数据卷命令
#1.查看所有维护数据卷
docker volume ls
#2.查看维护数据卷详细内容
docker inspect 数据卷名称,网桥名称,容器名称 #注意使用时如果与网桥重名优先网桥
#1.
docker network inspect 网桥名称
#2.
docker volume inpect 数据卷名称
#3.删除数据卷
docker volume rm 数据卷别名
#4.创建数据卷
docker volume create 数据卷别名
#1.打包镜像
docker save 镜像名 -o 名称+版本.tar
docker export -o xxx.tar CONTAINER:将容器CONTAINER导出到本地文件xxx.tar中
#2.载入镜像
docker load -i 名称.tar
docker import xxx.tar image_name:tag:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag
#3.容器打包镜像
docker commit -m '描述' -a '作者' 容器id|name 打包镜像名称
docker commit -m 'deploy test project' -a 'wsz' tomcat:8.0 wsz-tomcat
#4.区别
docker export/import与docker save/load的区别:
export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
save/load会保存完整记录,体积更大
docker top CONTAINER:查看某个容器内的所有进程
docker stats:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息
docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx:在本地和容器间复制文件
docker rename CONTAINER1 CONTAINER2:重命名容器
docker update CONTAINER --memory 500MB:修改容器限制
1.docker: Error response from daemon: driver failed programming external connectivity on endpoint 容器名
docker服务启动时定义的自定义链DOCKER被清除,重启即可
systemctl restart docker
#1.启动mysql 开发端口映射(3306)指定root用户密码才行 -e(environment)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8.0
#2.启动mysql 开发端口映射(3306)指定root用户密码才行 -e(environment) -d(后台运行) --name(指定名称)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysqlw mysql:8.0
#3.启动mysql 开发端口映射(3306)指定root用户密码才行 -e(environment) -d(后台运行) --name(指定名称) --restart=always(总是运行)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysqlw --restart=always mysql:8.0
#4.启动mysql 开发端口映射(3306)指定root用户密码才行 -e(environment) -d(后台运行) --name(指定名称) --restart=always(总是运行)数据持久化到宿主机
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysqlw --restart=always -v /root/data:/var/lib/mysql mysql:8.0
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysqlw --restart=always -v mysqlDate:/var/lib/mysql mysql:8.0
#1.备份所有数据
docker exec 容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > [/some/path/on/your/host/]all-databases.sql
#2.备份指定库的数据
docker exec 容器id sh -c 'exec mysqldump --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > [/some/path/on/your/host/]all-databases.sql
#3.备份指定库的结构不要数据
docker exec 容器id sh -c 'exec mysqldump --no-data --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > [/some/path/on/your/host/]all-databases.sql
#4.远程连接借助工具
#1.修改本地连接root密码
alter user root@localhost identified with mysql_native_password by '123456';
FLUSH PRIVILEGES
#2.修改远程连接root密码
alter user root@'%' identified with mysql_native_password by '123456';
FLUSH PRIVILEGES;
连接时出现问题2058
修改一下远程连接的密码就🆗
docker pull redis:版本
#1.启动redis 映射端口 6379
docker run -p 6379:6379 redis:7.0.4【容器id|name】
#2.启动redis 映射端口 6379 后台启动 -d 修改名字 --name 总是启动 --restart=always
docker run -p 6379:6379 -d --name 'wsz-redis' --restart=always redis:7.0.4【容器id|name】
#3.启动redis 映射端口 6379 后台启动 -d 修改名字 --name 总是启动 --restart=always 开启aof持久化
docker run -p 6379:6379 -d --name 'wsz-redis' --restart=always --appendonly yes redis:7.0.4【容器id|name】
#reids持久化有两种
#1.rdb: 快照 redis服务某一时刻数据以快照文件的形式写入磁盘
#2.aof: redis服务将所有redis客户端的写操作以命令的方式记录
#4.启动redis 映射端口 6379 后台启动 -d 修改名字 --name 总是启动 --restart=always 开启aof持久化 映射数据文件外部
docker run -p 6379:6379 -d --name 'wsz-redis' --restart=always -v/ [/some/path/on/your/host/]:/data --appendonly yes redis:7.0.4【容器id|name】
#1.如何获取redis配置文件
1.下载对应的配置文件进行修改 传到容器或挂载到容器后使用其启动
2.创建指定配置文件名称直接书写修改属性即可 (推荐)
#2.上传到宿主机指定目录
例如 /usr/local/redisconf/redis.conf
#3.数据卷配置挂载
docker run -d -p 6379:6379 --restart=always -v /usr/local/redisconf/:/data redis:7.0.4 redis-server /data/redis.conf
#1.开启aof
appendonly yes
#2.aof文件名称为wsz.aof
appendfilename "wsz.aof"
docker pull nginx:1.19.10
#1.启动nginx 映射端口80
docker run -p 80:80 nginx:1.19.10
#2.启动nginx 映射端口80 后台启动 -d 总是启动 --restart=always 指定名称 --name nginx-wsz
docker run -p 80:80 -d --restart=always --name nginx-wsz nginx:1.19.10
#3.启动nginx 映射端口80 后台启动 -d 总是启动 --restart=always 指定名称 --name nginx-wsz 加载配置 -v 宿主机/容器(/etc/nginx/nginx.conf)
docker run -p 80:80 -d --restart=always --name nginx-wsz -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx:1.19.10
#1.方向代理负载均衡
#1.docker cp 容器id|name:/etc/nginx/nginx.conf 本地
docker cp 容器id|name:/etc/nginx/nginx.conf:/usr/local/docker/nginx/conf/nginx.conf
#2.修改完后运行
docker run -p 80:80 -d --restart=always --name nginx-wsz -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx:1.19.10
#2.nginx 服务器
docker run -p 80:80 -d --restart=always --name nginx-wsz -v /usr/local/docker/nginx/html/:/usr/share/nginx/html/ nginx:1.19.10
NETWORK ID | NAME | DRIVER | SCOPE |
---|---|---|---|
213... | bridge | bridge | local |
66b... | host | host | local |
083... | none | null | local |
docker network create -d bridge[默认] 网络名称
docker network ls
docker network inspect
#删除指定的网络
docker network rm 网络名
#删除没使用的所有网络
docker network prune 删除没使用的所有网络
#启动时确认容器使用那个网络
docker run -d --network 网络名称 容器id|name
#启动后容器加入那个网络
docker network connect 网络名 容器id|name
#基于这个镜像进行构建,必须作为Dockerfile的第一个指令出现。
- FROM
FROM 镜像名:版本
#构建镜像时需要的命令
- RUN
RUN 构建镜像时需要的命令
#指定在容器创建后,终端进来的工作位置,如果这个目录不存在,它将被创建。
- WORKDIR
WORKDIR 目录
#构建镜像过程中设置环境变量
- ENV
ENV 变量=值
设置环境变量,用的时候这样:$变量。
#复制宿主机目录下文件或远程文件到容器指定路径的中
- ADD
ADD 本地文件路径/远程文件url 容器中路径
#复制宿主机目录下文件或远程文件到容器指定路径的中
- COPY
COPY 拷贝文件到镜像
#数据卷
- VOLUME
#指定容器启动时执行命令
- CMD
CMD 命令
指定容器启动时执行的命令,只有最后一个(所有容器Dockerfile的CMD的最后一个)才会生效。
#指定容器启动时执行命令
-ENTRYPOINT
指定容器启动时执行的命令,一般搭配CMD使用,不修改的部分放这
- #
注释
#例子
FROM openjdk:8-jre
ENV APP_PATH=/apps
WORKDIR $APP_PATH
ADD blog-0.0.1-SNAPSHOT.jar $APP_PATH/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar"]
CMD ["apps.jar"]
#1.github 下载
sudo curl -L https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#1.daocloude下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/V2.14.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#2.添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
#3.检测是否安装成功
docker compose --version
docker-compose version V2.14.1, build 1719ceb
docker compose up -d【后台启动】启动
docker compose down 关闭容器
docker compose stop 关闭容器
docker compose config 检验docker compose 编写是否正确
docker compose logs [服务名] 查看服务日志
docker compose stop命令将停止运行的容器,但不会删除它们。
docker compose down命令将停止运行的容器,并且会删除已停止的容器以及已创建的所有网络。 我们可以down进一步迈出第一步,并添加-v标记以删除所有卷。这对于通过运行在环境中进行完全重置非常有用docker-compose down -v。
#docker-componse项目版本号
version: "3.0"
services:
tomcat:
#container_name: tomcat01 #代表给容器一个指定名称 推荐不写系统默认
image: tomcat:8.0 #代表使用的镜像
ports: #端口映射
- 8080:8080
networks: #设置网桥
- project
#可以配多个
tomcat01:
#container_name: tomcat01 #代表给容器一个指定名称 推荐不写系统默认
image: tomcat:8.0 #代表使用的镜像
ports: #端口映射
- 8081:8080
networks: #设置网桥
- project
redis:
image: redis:7.0.4 #代表使用的镜像
ports: #端口映射
- "6380:6379" #可以使用引号
restart: always #总是启动
volumes: #给容器和宿主机指定数据卷
- /usr/local/docker/redis-data/:/data
command: redis-server /data/redis.conf #容器启动后执行的命令
networks: #设置网桥
- project
mysql:
image: mysql:8.0.31 #代表使用的镜像
ports: #端口映射
- "3306:3306"
environment: #代表给容器指定启动环境
- "MYSQL_ROOT_PASSWORD=root" #类似 docker run -e "MYSQL_ROOT_PASSWORD=root"
volumes: #给容器和宿主机指定数据卷 类似 docker run -v 使用绝对路径时必须先创建
- /root/mysqldatas:/var/lib/mysql #绝对路径
- mysqlData:/var/lib/mysql #相对路径 需要声明
networks: #设置网桥
- project
apps:
#build: ./ #默认在当前目录
build:
context: ./ #指定Dockerfile上下文目录
dockerfile: Dockerfile #指定Dockerfile文件名称
ports:
- "3000:3000"
depends_on: #依赖与什么
- redis
- mysql
networks: #设置网桥
- project
volumes:
mysqlData: #声明数据卷别名
networks: #声明网桥
project:
docker-compose报错,/usr/local/bin/docker-compose: line 1: {error:Document not found}:
使用docker compose 即可
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。