docker学习笔记,从入门开始!

1.配置docker yum 源

复制代码
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

2.安装docker

复制代码
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.1启动docker
复制代码
sudo systemctl start docker 
2.2配置docker开机启动
复制代码
systemctl enable docker
2.3配置加速
复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.1ms.run",
		"https://mirror.ccs.tencentyun.com"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

或者

复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",  # 轩辕镜像(境内CDN,兰州地区推荐)
    "https://docker.m.daocloud.io", # 国内老牌服务商
    "https://docker.imgdb.de",     # 德国镜像站(全球化同步)
    "https://docker-0.unsee.tech"  # 亚洲节点加速站
  ]
}
EOF
# 应用配置并重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

或者

复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime"
    }
  },
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
  ]
}
EOF

# 应用配置并重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

3.下载镜像

复制代码
检索:docker search 
docker search nginx /  docker search docker.1ms.run/nginx 
下载 docker pull
docker pull nginx:1.26.0
列表:docker images 查看镜像
删除:docker rmi
docker rmi nginx:latest / docker rmi 94543a6c1aef

4.启动容器

复制代码
运行:docker run 
docker run nginx / docker run nginx:1.26.0
docker run -d --name mynginx nginx (-d 后台启动 --name 取别名)
docker run -d --name mynginx26 -p 88:80 nginx:1.26.0 (-p 88:80 88是暴露出去的端口,80是容器内的端口)

常见命令举例
查看:docker ps 查看存活对象  docker ps -a 查看所有对象
停止:docker stop
docker stop 226 / docker stop mystifying_clarke
启动:docker start
docker start mystifying_clarke
重启:docker restart
docker restart mystifying_clarke
状态 :docker stats
日志:docker logs
docker logs 226
进入: docker exec
docker exec -it mynginx /bin/bash  退出编辑exit
删除: docker rm 
docker rm -f 226 强制删除
docker rm 226 需要先 docker stop 226
批量删除容器
docker container prune (删除退出的容器)
docker rm -f `docker ps -q`
docker rm -f $(docker ps -q)
提交:docker commit 
docker commit -m "update inedx.html" mynginx mynginx:v1.0 (-m 备注信息 )
保存:docker save
docker save -o mynginx.tar mynginx:v1.0 (-o 打包成对应的tar包)
加载:docker load
docker load -i mynginx.tar (-i 指定加载的压缩包)
登录:docker login (容易连接不了)
改名:docker tag mynginx:v1.0 lilusheng/mynginx:v1.0
推送:docker push lilusheng/mynginx:v1.0 不能使用 

5.docker存储

复制代码
目录挂载,数据卷
目录挂载:
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx                       ( -v /app/nghtml:/usr/share/nginx/html)
卷映射:
docker run -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name app04 nginx (-v ngconf:/etc/nginx)
卷统一位置:
/var/lib/docker/volumes/<volumn-name> eg:/var/lib/docker/volumes/ngconf/_data

查看卷:docker volume ls 
创建卷 :docker volume create haha
查看卷详情:docker volume inspect ngconf

6.自定义网络

复制代码
容器内访问:curl 119.45.193.239:80 (很奇怪)
docker container inspect 
curl http://172.17.0.3:80
docker为每个容器分配唯一ip,使用容器ip+容器端口可以相互访问,ip由于各种原因可能会变化
docker0默认不支持主机域名访问
//先创建网络
docker network create mynet
//查看网络
docker network ls
//创建
docker run -d -p 80:80 --name app01 --network mynet nginx
docker run -d -p 88:80 --name app02 --network mynet nginx
进入app01测试容器内访问
docker exec -it app01 bash
curl app02:80
6.1实例测试举例
复制代码
redis主从同步集群
主:
docker run -d -p 6380:6379 
-v /app/rd2:/bitnami/redis/data 
-e REDIS_REPLICATION_MODE=master 
-e REDIS_PASSWORD=123456 
--network mynet 
--name redis01 bitnami/redis
从:
docker run -d -p 6380:6379 \
> -v /app/rd2:/bitnami/redis/data \
> -e REDIS_REPLICATION_MODE=slave \
> -e REDIS_MASTER_HOST=redis01 \
> -e REDIS_MASTER_PORT_NUMBER=6379 \
> -e REDIS_MASTER_PASSWORD=123456 \
> -e REDIS_PASSWORD=123456 \
> --network mynet --name redis02 bitnami/redis

mysql的docker启动命令:
docker run -d -p 3306:3306 \
-v /app/myconf:/etc/mysql/conf.d \
-v /app/mydata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.37-debian

7.docker compose

复制代码
通过compose.yaml 批量的启动对应的容器
--------------------------------
compose.ymal 
顶级元素:
name 名字
services 服务
networks 网络
volumes 卷
configs 配置
secrets 密钥
完整的ymal
--------------------------------------
name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - blog

  wordpress:
    container_name: wordpress-app
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      - WORDPRESS_DB_HOST=mysql
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=123456
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - wordpress:/var/www/html
    restart: always
    networks:
      - blog
    depends_on:
      - mysql
volumes:
  mysql-data:    
  wordpress:
networks:
  blog:
--------------------------------
上线:docker compose up -d  (第一次的启动)
docker compose -f compose.yaml up -d (-f compose.yaml 指定文件)
下线:docker compose down 
docker compose -f compose.yaml down
docker compose -f compose.yaml down --rmi all -v (--rmi all -v  指的是下线镜像和对应的卷)
启动:docker compose start x1 x2 x3 (指的是停止容器的启动)
停止:docker compose stop x1 x2 x3
扩容:docker compose scale x2=3 (某个容器复制三份)

docker compose -f compose.yaml down --rmi all -v

8.Dockerfile 自定义镜像

复制代码
基础环境
软件包
启动命令

常见指令
FROM :指定镜像基础环境
RUN:运行自定义命令
CMD:容器启动命令和参数
LABEL:自定义标签
EXPOSE:指定暴露端口
ENV:环境变量
ADD:添加文件到镜像
COPY:复制文件到镜像
ENTRYPOINT:容器固定启动目录
VOLUME:数据卷 
USER:指定用户和用户组
WORKDIR:指定默认工作目录
ARG : 指定构建参数
8.1实例
复制代码
1.rz 上传对应的jar包
app01.jar
2.创建Dockerfile文件
vim Dockerfile
-------------------------
FROM openjdk:8
LABEL author=lilusheng
COPY app01.jar /app01.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app01.jar"]
-------------------------

3.进行镜像构建
docker build -f Dockerfile -t myjavaApp:v1.0 .

生成对应的镜像myjavaApp:v1.0

4.启动镜像
docker run -d -p 8080:8080 myjavaApp:v1.0

5.进行网页验证
https:xxx:8080/books
结果:springboot is running 验证成功
相关推荐
不爱笑的良田8 小时前
从零开始的云原生之旅(一):把 Go 应用塞进 Docker
docker·云原生·golang
D.....l8 小时前
STM32学习(MCU控制)(WiFi and MQTT)
stm32·单片机·学习
摆烂积极分子8 小时前
安卓开发学习10-中级控件
学习
少爷晚安。8 小时前
Java零基础学习完整笔记,基于Intellij IDEA开发工具,笔记持续更新中
java·笔记·学习
junziruruo8 小时前
半监督学习,少样本学习和零样本学习
python·学习·机器学习
学习和思考9 小时前
为什么我的vscode有的时候可以跳转,有的时候不能跳转
arm开发·ide·驱动开发·vscode·学习·1024程序员节
兔兔爱学习兔兔爱学习9 小时前
LangChain4j学习6:agent
人工智能·学习·语言模型
lkbhua莱克瓦2410 小时前
Java基础——常用API2
java·笔记·github·学习方法
java_logo10 小时前
Docker 部署 Rocky Linux 全流程教程
linux·运维·服务器·docker·容器·1024程序员节