docker入门使用

一.docker的使用

1.docker的简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器 [2]

2.docker的下载

curl -fsSL https://get.docker.com |bash -s docker --mirror Aliyun

3.docker更换下载源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-"EOF"
{
  "registry-mirrors": ["https://gxeo3yz7.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

4.查看docker的相关配置

查看镜像
sudo docker images 或者 sudo docker images ls 
sudo docker images -a 查看所有的镜像

查看可以拉取哪一些镜像
sudo docker search 镜像名

5.拉取镜像

docker pull 镜像名


卸载镜像
docker rmi 镜像名

6.创建mysql 容器

docker pull mysql:5.7 拉取镜像
docker run -d --name mysql-5.7-3307  -p 3307:3306 -e MYSQL_ROOT_PASSWORD='xiao.123' mysql:5.7   创建容器

-d 是后台运行
--name 容器名称
-p 使用的端口,3307 是外部能访问的,3306是容器的端口
-e  指定环境变量 设置密码
-v (使用docker数据卷)
docker exec -it mysql-5.7-3307 bash   进入到容器内部
--network 

进入mysql   mysql -uroot -p密码

授权其他机器登录mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xiao.123' WITH GRANT OPTION;

更新权限
    FLUSH PRIVILEGES;

删除容器

docker rm 容器名或者容器id

7.创建redis容器

1.docker pull redis 拉取镜像
2. 从本地的redis配置中复制redis.conf文件 到/usr/local/redis目录下(redis目录要创建)
3. 接着把redis.conf通过数据卷,添加到容器里面
docker run -d  --name  redis-6380  -v /usr/local/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data   -p 6380:6379  redis
4.docker ps -a 查看创建的容器是否运行,如果运行,则进入到容器内部
		docker exec -it redis-6380 bash		查看redis.conf 是否存在
		如果存在,则测试远程

8 把本地的文件 移到容器里面

1.创建一个a.py文件
2. 把文件移到容器里面 :docker cp 本地文件   容器名:/绝对路径
docker cp a.py redis-6380:/data
(容器文件到本地上诉位置互换即可)
3.进入容器,查看是否存在

9.docker查看日志

docker logs 容器名称/ID
docker logs -f(查看实时日志)  -t(查看日志产生的日期)--since="2018-12-1" --tail=10 qfjy-exam(容器名称)

二.dockerfile文件的使用

使用 Dockerfile 定制镜像 - Docker — 从入门到实践 (gitbook.io)

FROM:指定基础镜像。
       
FROM ubuntu:latest

    
MAINTAINER:指定维护者信息。
        
MAINTAINER yourname@example.com

    
RUN:在构建镜像过程中执行命令。
        
RUN apt-get update && apt-get install -y nginx

    
CMD:指定容器启动时默认执行的命令。
        
CMD ["echo", "Hello, World!"]

    
ENTRYPOINT:指定容器启动时的入口命令,与 CMD 配合使用。

ENTRYPOINT ["python", "app.py"]

    
COPY:将本地文件复制到容器中。

COPY ./app /app

    
ADD:将本地文件添加到容器中的指定目录,支持自动解压缩。
        
ADD app.tar.gz /app/

    
ENV:设置环境变量。

ENV MY_VAR=my_value

    
ARG:定义构建参数,可以在运行时替换。
        
ARG MY_ARG=default_value

    
LABEL:为镜像添加元数据标签。
        
LABEL maintainer="yourname@example.com"

    
VOLUME:指定容器中的持久化存储卷。

VOLUME /data

    
EXPOSE:声明容器提供服务的端口。

EXPOSE 80

    
WORKDIR:设置工作目录。
        
WORKDIR /app

    
USER:切换用户。

USER www-data

    
HEALTHCHECK:定义健康检查指令。

HEALTHCHECK --interval=30s --timeout=3s \n  CMD curl -f http://localhost/ || exit 1

    
STOPSIGNAL:设置容器停止信号。

STOPSIGNAL SIGTERM

    
CHMOD、CHOWN、SETGID、SETUID:设置文件权限和所有权。

RUN chmod +x /app/script.sh
RUN chown root:root /app/script.sh
RUN setgid 1000
RUN setuid 1000

    
SHELL:指定容器内使用的 shell。

SHELL ["/bin/bash", "-c"]


案例

在本地创建一个django项目 然后创建requirements.txt 
Django==4.2.6
django_redis==5.4.0
djangorestframework==3.14.0
djangorestframework_simplejwt==5.3.0
PyMySQL==1.1.0



# 设置工作目录
WORKDIR /app

# 将当前目录下的所有文件复制到容器的/app目录下
COPY .  /app 

# 安装项目依赖
RUN pip install  -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 暴露端口
EXPOSE 8000

# 运行Django开发服务器
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

三. docker-compose的使用

安装docker-compose: pip install docker-compose


version:指定 Docker Compose 文件格式的版本。
        
yaml
复制代码
version: '3'

    
services:定义一组服务,每个服务包含一个容器实例。

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

    
build:构建镜像时使用的上下文路径。

services:
  web:
    build: ./webapp

    
image:指定容器使用的镜像名称或 ID。
        
services:
  web:
    image: my_web_image:1.0

    
container_name:指定容器的名称。

services:
  web:
    image: nginx:latest
    container_name: my_web_container

    
ports:映射容器端口到主机端口。
        
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

    
volumes:挂载主机目录到容器中。

services:
  web:
    image: nginx:latest
    volumes:
      - ./data:/var/www/html

    
environment:设置环境变量。

services:
  web:
    image: nginx:latest
    environment:
      - MY_ENV_VAR=my_value

    
command:覆盖容器启动时的默认命令。
        
services:
  web:
    image: nginx:latest
    command: ["nginx", "-g", "daemon off;"]

    
depends_on:定义服务之间的依赖关系。
        
services:
  web:
    image: nginx:latest
    depends_on:
      - db
  db:
    image: postgres:latest

    
networks:将服务连接到指定的网络。
        
networks:
  my_network:
    driver: bridge
services:
  web:
    image: nginx:latest
    networks:
      - my_network

    
secrets:从主机传递加密的敏感数据到容器中。
        
yaml
复制代码
version: '3'
services:
  web:
    image: my_web_image:1.0
    secrets:
      - my_secret_key

    
configs:从主机传递配置文件到容器中。
        
version: '3'
services:
  web:
    image: my_web_image:1.0
    configs:
      - my_config_file

    
restart:定义容器在退出时是否自动重启策略。
version: '3'
services:
  web:
    image: nginx:latest
    restart: always

    
logging:配置日志驱动和日志相关选项。

复制代码
version: '3'
services:
  web:
    image: nginx:latest
    logging:
      driver: syslog
      options:
        syslog-address: tcp://localhost:514
        tag: my_web_app

    
healthcheck:定义健康检查指令和选项。

version: '3'
services:
  web:
    image: nginx:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/"]
      interval: 30s
      timeout: 5s
      retries: 3

案例:docker-compose.yml 创建两个mysql容器

version: "3"
services:
  mysql01:
    image: mysql:5.7
    container_name: mysql0
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: node
      MYSQL_USER: node
      MYSQL_PASSWORD: 123456
  mysql02:
    image: mysql:5.7
    container_name: mysql02
    ports:
      - 3308:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: node
      MYSQL_USER: node
      MYSQL_PASSWORD: 123456

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾有所爱,其名华夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值