初识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 : 环境变量

测试

连接成功

相关推荐
小和尚同志30 分钟前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手33 分钟前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
就叫飞六吧9 天前
基于keepalived、vip实现高可用nginx (centos)
python·nginx·centos
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
程序员的世界你不懂9 天前
Appium+python自动化(三十)yaml配置数据隔离
运维·appium·自动化
算法练习生9 天前
Linux文件元信息完全指南:权限、链接与时间属性
linux·运维·服务器
忘了ʷºᵇₐ9 天前
Linux系统能ping通ip但无法ping通域名的解决方法
linux·服务器·tcp/ip
浩浩测试一下9 天前
渗透测试指南(CS&&MSF):Windows 与 Linux 系统中的日志与文件痕迹清理
linux·运维·windows·安全·web安全·网络安全·系统安全