Docker基础
目录
一、理解
docker容器(集装箱/沙箱):环境+应用——>可移植容器中,发布到任何linux机器上
二、部署
(1)安装docker
进入docker官网,选择所要的系统
https://docs.docker.com/engine/install
https://docs.docker.com/engine/install
选择后根据官网步骤一步步装

如下图可正常使用docker

再输入systemctl enable docker 让其自启动

(2)更换网络镜像源
vim /etc/docker/daemon.json 创建镜像源文件
systemctl daemon-reload 重载
systemctl restart docker 重启docker

注:镜像源决定了镜像下载的丰富性,请选择多镜像的源添加。
三、Nginx镜像测试
1.镜像
docker search 所需镜像:检索镜像。也可以去官网(用魔法)查询镜像下载
https://hub.docker.com
https://hub.docker.com静态页面或者详情在官网也有体现,需要用到的时候直接在官网相关地方查询
没有魔法的也可以去轩辕镜像下载
https://xuanyuan.cloud
https://xuanyuan.cloud
docker pull 所需镜像:下载
例子:docker pull nginx:1.1.1:下载指定1.1.1版本的nginx

docker images: 列表

docker rmi (唯一id)或者镜像名:版本名 :删除
例子:docker rmi nginx:latest :删除最新版nginx镜像(或者 docker rmi 3f8a4339aadd)
2.启动容器/修改内容
docker run 镜像名:版本号 :运行容器
docker ps -a :查看所有(包括已终止)

注1:容器本身启动自带端口,但外界无法访问,此端口为容器内独立端口只能在容器内使用。如果要外部访问,需要做端口映射(-p),将容器端口映射出去。
注2:容器内端口可重复(各自独立),映射端口不能重复。外部端口:内部端口(内部端口可重复)

docker stop 容器名(或ID):停止容器
docker start 容器名(或ID):启动容器(先运行才能启动)
docker stats 容器名(或ID):查看容器状态
docker logs 容器名(或ID):日志
docker exec -it 容器名 /bin/bash :进入容器控制台交互模式

进入后的操作与linux无异。但docker未自带vi等命令


输入exit退出控制台

docker rm 容器名(或ID):删除容器
docker rm -f $(docker ps -aq):把之前启动的都删除
3.保存镜像
docker commit 容器名 想存的名字: 提交到镜像列表

docker image inspect nginx

docker image inspect hellonginx:v1.0

对比可见多了一层
故:由于镜像分层存储机制,hellonginx与nginx共用108M。hellonginx只占用几kb的修改空间

docker save -o 名.tar 镜像列表的镜像名: 保存成文件

docker load -i 文件:加载

4.挂载
背景:容器修改文件较为繁琐且容易丢失
docker run -v 外部目录:内部目标目录 :映射启动
注意:使用映射后以外部文件为准,若外部无数据则会出错


docker run -v 卷名:内部目标目录 :卷映射启动

映射会存在 /var/lib/docker/volumns/卷名 目录下,在该目录下就能编辑配置文件
5.网络
(1)默认网络
先启动两台docker

进入1后
![]()
访问2

其中,app1是通过了docker 0 的网关访问到app2

docker inspect 容器名 :查看细节

docker 为每个容器也会分配一个唯一IP形成小的局域网,使用容器IP+容器内部应用端口即可访问。网关为docker 0
也可以通过局域网的IP进行访问。但端口为容器应用的内部端口。

(2)稳定域名
背景:IP可能会变化
docker network create xxx :创建自定义网络(默认网络docker0不支持域名)

docker run --network xx : 容器启动加入自定义网络中

直接使用 容器名:内部端口 即可访问
![]()
四、redis主从同步集群
(1)主
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=qwe123. \
--network net --name redis001 \
bitnami/redis
docker logs 0fc 查看日志找原因,发现目录只读(无权限)


chmod -R 777 rd1,修改后重新运行成功

(2)从
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis001 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=qwe123. \
-e REDIS_PASSWORD=qwe123. \
--network net --name redis002 \
bitnami/redis


测试成功


五、MYSQL
docker run -d -p 3306:3306 \
-v /app/myconf:/etc/mysql/conf.d \
-v /app/mydata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=qwe123. \
mysql
测试成功

六、批量管理容器
docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=qwe123. \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress:latest
docker run -d -p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=qwe123. \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql
compose.yaml文件
name: myblog
services:
mysql:
container_name: mysql
image: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=qwe123.
- MYSQL_DATABASE=wordpress
volumes:
- mysql-data:/var/lib/mysql
- /app/myconf:/etc/mysql/conf.d
restart: always
networks:
- blog
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: qwe123.
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress:/var/www/html
restart: always
networks:
- blog
depends_on:
- mysql
volumes:
mysql-data:
wordpress:
networks:
blog:
docker compose -f xx.yaml up -d :上线


注:如果有修改,只会重启有更改的服务
docker compose -f xx .yaml down --rmi all -v:移除所有容器/网络/镜像且移除卷
docker compose start xx xx xx :启动
docker compose stop xx xx xx:停止
七、制作镜像
理解:使用dockerfile制作镜像。镜像类似与虚拟机iso
FROM openjdk:17 #环境 也可以写Ubuntu #RUN #运行指令
LABEL author=xxx #标签(署名)
COPY app.jar /app.jar (复制文件到镜像)
EXPOSE 8080 #端口
ENTRYPOINT ["java","-jar","/app.jar"] #添加启动位置
docker build -f Dockerfile -t xxx:v1.0 . :构建名字为xxx的dockerfile

更多推荐

所有评论(0)