初识docker

初识docker

1. 安装docker

Linux 复制代码
 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce                     

查看docker版本
docker -v

2. 启动docker

Linux 复制代码
 systemctl start docker
 systemctl status docker
 systemctl restart docker
 systemctl stop docker

启动docker之前,最好将防火墙关闭,为后期访问docker中部署的服务做准备
sudo ufw disable
sudo ufw status

3. 配置镜像加速器

Linux 复制代码
## 为后期快速下载docker镜像做准备,以阿里云镜像站举例
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mlbe5lel.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

阿里云配置详情

4.docker基本操作

镜像操作

镜像的命名

  • 镜像名称一般分两部分组成:repository:tag。例:MySQL:5.7
  • 在没有指定tag时,默认是Latest,代表最新版本的镜像

镜像操作命令

Linux 复制代码
docker images  #查看镜像
docker rmi   #删除镜像
docker pull  #拉取镜像,从镜像服务器或者私服
docker push  #推送镜像到镜像服务器
docker bvild #使用本地文件去构建镜像
docker save  #保存镜像为一个压缩包
docker load  #加载压缩包为镜像

命令举例

Linux 复制代码
docker pull nginx   #拉取Nginx镜像
docker images  #查看镜像拉取是否成功
docker save -o nginx.tar nginx:latest
# 将Nginx镜像保存成压缩包 Nginx.tar
docker rmi nginx:latest
#将拉取的Nginx镜像删除
docker load -i nginx.tar
# 加载Nginx.tar的镜像

容器操作

Linux 复制代码
docker run #创建容器(运行状态)
docker start #运行容器
docker stop #停止容器
docker pause #暂停容器
docker unpause #恢复暂停的容器
docker Logs #查看容器运行日志
docker ps  #查看所有运行的容器及状态
docker ps -a #可以查看没有运行的容器状态
docker exec #进入容器执行命令
docker rm #删除指定容器
docker rm -f #强制删除指定容器

docker logs -f container1
添加-f参数可以持续查看日志

命令举例

  1. 创建运行一个Nginx容器
Linux 复制代码
docker run --name container1 -p 80:80 -d nginx

命令解读:

  • docker run:创建并运行一个容器
  • -name:给容器起一个名字,比如叫做container1
  • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx
  • 创建容器之后,生成容器的ID,显示出来
  1. 进入Nginx容器,修改HTML文件内容。
Linux 复制代码
docker exec -it container1 bash

命令解读:

  • docker exec:进入容器内部,执行一个命令
  • -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • container1:要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个inux终端交互命令
    修改文件内容
Linux 复制代码
cd /usr/share/nginx/html/
apt-get update
apt-get install vim -y 
或者
sed -i -e 's#Welcome to nginx#初识docker#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

exit 可以退出容器

Linux 复制代码
exc命令可以进入容器修改文件,但是在容器内修改文件是不推荐的

数据卷(容器数据管理)

  1. 数据卷操作的基本语法
Linux 复制代码
docker volume create 创建一个volume
docker volume inspect 显示一个或多个volume的信息
docker volume prune  删除未使用的volume
docker volume ls 列出所有的volume
docker volume rm 删除一个或多个指定的volume

操作举例

Linux 复制代码
docker volume create trick
创建数据卷
docker volume ls
查看所有数据卷
docker volume inspect trick
查看数据卷详细信息
  1. 数据卷挂载
  • 基本语法
Linux 复制代码
-v html::root/htm:把html数据卷挂载到容器内的/root/html这个目录中
  • 操作举例

    新创建一个容器,将html数据卷挂载到/usr/share/nginx/html目录中

Linux 复制代码
docker run --name trick -p 80:80 -v html:/usr/share/nginx/html -d nginx

如果没有创建html数据卷,使用上述命令也是可以的,docker会自动创建数据卷
/usr/share/nginx/html 是Nginx镜像中的HTML所在目录
可以在https://hub-stage.docker.com/_/nginx 查到
然后,通过docker volume inspect html 目录查看数据卷的挂载点。

就可以进入这个目录,去修改index.html文件(实现了没有进入容器去修改容器里面的文件)

  • 将宿主机的目录或文件挂载到容器
Linux 复制代码
-V [宿主机目录][容器内目录]
-V「宿主机文件][容器内文件]

案例:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

  • 1.拉取MySQL的镜像
  • 2.创建目录/tmp/mygl/data
  • 3.创建目录/tmp/myql/conf,将准备的MySQL配置文件hmy.cnf文件使用远程工具上到/tmp/mygl/conf
  • 4.去DockerHub查阅资料,创建并运行MySQL容器,要求:
    • 挂载/tmp/myql/data到mysql容器内数据存储目录
    • 挂载/tmp/myql/conf/hmy.cnf到mysql容器的配置文件
    • 设置MySQL密码
Linux 复制代码
docker pull mysql

mkdir -p /tmp/mysql/data
mkdir -p /tmp/mysql/conf

docker run --name mysql -e MYSQL_ROOT_PASSWORD=密码 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data/:/var/lib/mysql -d mysql

## -e : 环境变量

测试

连接成功

相关推荐
JavaPub-rodert16 分钟前
Docker 日志为什么能把磁盘写爆?讲透 json-file、local、journald、日志轮转与 docker logs
docker·eureka·json
缓慢更新1 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
人生匆匆1 小时前
docker部署ceph集群
ceph·docker·容器
续写烂尾2 小时前
贴片 SD NAND、eMMC、TF 卡规格怎么定?硬件工程师选型清单
运维·服务器·网络
不昀2 小时前
网口Link Up后仍然掉线,怎样区分物理链路和数据通路问题?
linux·以太网
迪康妍妍2 小时前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
sxgzzn2 小时前
如何选择合适的开关柜在线监测工具?
运维·重构·无人机·开关柜局放在线监测·光伏运维管理系统
Lhan.zzZ3 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
zxcvb1533 小时前
运维经验分享:监控网页更新内容的几种思路
运维
Fcy6484 小时前
Linux下 多路转接select详解
linux·select·多路转接