1 Star 1 Fork 0

BreezeWangsz / docker实战小项目

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

docker命令

1.安装

在测试或开发环境中 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

镜像(images)

拉取镜像:

拉取镜像:

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中加载出来

容器(container)

查看本地容器

docker ps -a:查看本地的所有容器

docker ps :查看本地所有运行的容器

仅创建容器

创建容器

docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。

创建并启动容器(run):

创建并启动容器:

基础操作

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可以挂起容器

容器数据卷机制(Data Volume)

#实现容器数据与宿主机数据映射 (存储数据的容器一般要使用如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

mysql容器的使用

运行mysql以及数据持久化(宿主机)

#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
修改一下远程连接的密码就🆗

redis容器的使用

1.容器下载

docker pull redis:版本

2.运行

#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】

3.自定义配置

#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"

nginx容器的使用

1.容器下载

docker pull nginx:1.19.10

2.运行

#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 

3.配置

#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

网桥

1.网桥类型

NETWORK ID NAME DRIVER SCOPE
213... bridge bridge local
66b... host host local
083... none null local

2.创建网络自定义网桥

docker network create -d bridge[默认] 网络名称

3.查看网络

docker network ls

4.查看某个网络细节

docker network inspect

5.删除网络

#删除指定的网络
docker network rm 网络名

#删除没使用的所有网络
docker network prune 删除没使用的所有网络

6.运行多个容器在指定网络

#启动时确认容器使用那个网络
docker run -d --network 网络名称 容器id|name

#启动后容器加入那个网络
docker network connect 网络名 容器id|name

Dockerfile

#基于这个镜像进行构建,必须作为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"]

docker-compose

1.安装

#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

2.使用指令

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

3.编写模块命令

命令

#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 即可

docker中文文档

空文件

简介

我的docker学习总结和笔记 展开 收起
Docker
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Docker
1
https://gitee.com/breezewangsz/docker.git
git@gitee.com:breezewangsz/docker.git
breezewangsz
docker
docker实战小项目
master

搜索帮助