CSDN话题挑战赛第2期
参赛话题:学习笔记
目录
镜像的常用命令
# 下载镜像
docker pull 镜像名称# 镜像列表
docker images# 为镜像添加新的名称
docker tag redis my-redis:v1
docker tag redis redis-tedu:v2# 删除镜像的名称
# 删除最后一个名称时,会把镜像磁盘文件一起删除
# remove image
docker rmi my-redis:v1
docker images# 导出镜像到压缩文件
docker save rabbitmq:management benwang6/cerebro:0.9.4 | gzip > a.gz# 从压缩文件导入,加载镜像
# 先删除
docker rmi rabbitmq:management benwang6/cerebro:0.9.4
# 再导入
docker load -i a.gz
常用容器命令:
# 启动容器
docker run mariadb# 在前台启动,占用命令行
docker run redis# 查看容器
docker ps # 运行状态的容器
docker ps -a # all-a:显示所有容器,如果不加只显示正在启动运行的容器,停止的不会显示。
-l:显示最近的启动创建的容器。
-n=[数字]:显示最近n个容器。-q:只显示容器id。经常和-a一起使用,获得当前宿主机所有容器id参数集合。
# 查看镜像中设置的默认启动命令
docker history redisdocker history mariadb
docker history rabbitmq:management
# 覆盖 CMD 设置的默认命令
docker run redis pwddocker run redis ls -a -l
# -i 交互 -t 终端
docker run -it redis bashexit
-d 后台运行
docker run -d \
redisdocker ps
docker logs 容器ID前3位
进入容器,执行容器中的命令
docker exec -it cbc pwd
docker exec -it cbc touch a.txt
docker exec -it cbc ls -a -l
docker exec -it cbc bash
exit
docker ps
容器命名
docker run -d --name r1 \
redisdocker run -d --name r2 \
redisdocker ps
docker logs r1
docker stop r1 r2
docker start r1 r2
--restart=always 让容器可以随系统自动重启
服务器重启,或docker系统服务重启,容器默认是退出状态
docker run -d --name r3 \
--restart=always \
redisdocker ps
# 重启docker系统服务
systemctl restart dockerdocker ps
--rm 容器关闭时,会被系统自动删除
启动临时容器
-
查看容器中的一些默认设置
-
从容器复制文件到宿主机
# redis容器启动后,容器内有哪些环境变量
docker run --rm redis env
docker cp 在容器和宿主机之间互相复制文件
# 从容器复制文件到宿主机
docker cp r3:/data/dump.rdb ~/
ls
# 从宿主机复制文件到容器
docker cp ~/ip-static r3:/data/ip
# 进入容器查看文件
docker exec -it r3 ls /data/
数据挂载:文件、文件夹、数据卷
# 启动mariadb数据库,挂载宿主机的一个文件夹存放数据文件
# -v挂载会自动创建宿主机目录
docker run -d --name mysql \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
# 挂载文件
docker run -d --name r4 \
-v /root/redis.conf:/my.conf \
redis \
redis-server /my.conf
docker rm r1 r2 r3
docker rm -f r1 r2 r3
# 清理所有停止的容器
docker container prune
docker container prune -f
# 删除所有容器
# docker ps -aq 列出所有容器的id
docker rm -f $(docker ps -aq)
# 挂载文件夹
# 组主机的文件夹会自动创建
docker run -d --name r1 \
-v /opt/my-app/:/opt/app \
redis
# 访问容器内的路径,创建文件,实际是创建到宿主机挂载的目录下
docker exec -it r1 touch /opt/app/a.txt
# 查看宿主机文件
ls /opt/my-app/
数据卷挂载
# 清理容器
docker rm -f $(docker ps -aq)
# 新建数据卷
docker volume create my-vol
# 查看数据卷列表
docker volume ls
# 查看数据卷详情
docker inspect my-vol
# 启动数据库容器,挂载my-vol数据卷
docker run -d --name mysql \
-v my-vol:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
# 查看容器的挂载详情
docker inspect mysql
# 启动新的容器,my-vol挂载到容器
docker run -d --name r1 \
-v my-vol:/opt/app/ \
redis
docker exec -it r1 touch /opt/app/a.txt
# ls 数据卷的真实路径
ls /var/lib/docker/volumes/my-vol/_data
端口映射
-p 服务器端口:容器端口
# 宿主机的6379,映射到容器的6379
docker run -d --name r2 \
-p 6379:6379 \
redis
docker rm -f mysql
# mysql端口映射到服务器
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3380:3306 \
mariadb
--net host 让容器直接使用宿主机的网络和端口docker run -d --name r3 \
--net host \
redis \
redis-server --port 6380
虚拟网络
# 创建网络
docker network create my-net
# 查看网络列表
docker network ls
# 查看网络详情
docker inspect my-net
# 宿主机上创建的虚拟网卡
ifconfig
# 启动容器,连接到my-net网络
docker run -d --name r4 \
--net my-net \
redis
docker run -d --name r5 \
--net my-net \
redis
docker inspect r4
docker inspect r5
# 容器之间和容器与宿主机之间能否互通
ping 172.18.0.2
ping 172.18.0.3
docker exec -it r4 redis-cli -h 172.18.0.3
# 在容器的内部,提供了名字解析环境,可以把容器名,解析成正确的ip
docker exec -it r4 redis-cli -h r5
构建镜像
使用配置文件,来配置环境安装流程。
Dockerfile配置文件:
# 选择基础镜像
FROM redis
# 在新构建的镜像中添加 redis.conf
COPY redis.conf /redis.conf
# 设置新的启动命令:"redis-server redis.conf的路径"
CMD ["redis-server", "/redis.conf"]
# 设置默认文件件,容器启动后会自动切换到这个目录
WORKDIR /
# 设置默认端口,帮助镜像使用者理解这个镜像
EXPOSE 6379
将 Dockerfile 和构建过程中使用的文件,一起放到一个文件夹下[redis]
- Dockerfile
- redis.conf
# 准备文件夹和文件
mkdir /root/redis/
vim /root/redis/Dockerfile # 编辑文件, 把上面内容粘进去
# 按键盘i,进入编辑模式
# 按键盘esc,退出编辑模式
# :进入命令模式,输入wq,保存并退出
cp redis.conf /root/redis/
ls /root/redis/
执行构建:cd /root/redis/
docker build -t my-reids:v1 ./
docker images