Docker使用

时间:2024-03-29 14:26:17

目录

Docker安装

Docker常用命令

找镜像

启动镜像 

修改容器内容

提交改变

推送到远程仓库

物理传输

推送远程仓库

挂载数据

docker日志

docker复制


Docker安装

移除以前的docker相关包:sudo yum remove docker*

安装yum工具类:yum install -y yum-utils

添加docker安装源地址:

yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

安装docker:yum install -y docker-ce docker-ce-cli containerd.io

        docker-ce:docker社区版

        docker-ce-cli:操作docker服务器的命令行

        containerd.io:docker容器化的运行环境

启动docker:systemctl enable docker --now

配置阿里云镜像:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ckdhnbk9.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker常用命令

找镜像

hub.docker.com 在网站上搜索镜像:如Nginx,使用docker下载镜像

docker pull nginx //下载最新版

docker pull nginx:1.21.1 //下载1.21.1版

docker pull redis

启动镜像 

查看下载了哪些镜像:docker images

删除镜像:docker rmi 镜像名:版本号 / 镜像id

        直接写镜像名代表删除最新版本:docker rmi nginx == docker rmi nginx:latest

启动容器:有了镜像相当于有了安装包,启动容器相当于安装

        docker run [OPTIONS] image [COMMAND] [ARG...]

        OPTIONS:设置项 

        COMMAND:镜像启动运行的命令(镜像里一般有默认,一般不用写)

        docker run --name=mynginx -d  nginx

             --name=mynginx:设置容器名,不能与在运行中的和已关闭的容器重复,除非删除容器

             -d:后台运行

查看运行中的容器:docker ps

        查看所有容器,不管是否在运行:docker ps -a

删除已经关闭的容器:docker rm name / 容器id

        name:docker run 时设置的名字 :--name = mynginx

        删除在运行的容器:docker rm name -f

停止在运行的容器:

        前台运行:ctrl+c

        后台运行:docker stop 容器id/名字

启动停止的容器:docker start 容器id/名字

应用开机自启:docker update 容器id/名字 --restart=always

端口映射:启动docker容器相当于在linux服务器中创建一个虚拟服务器,当我们想要使用linux的公网ip访问服务器时,由于虚拟服务器只在docker容器中,对应的端口也只是虚拟服务器的,无法访问,这时我们可以在linux中使用一个端口与这个虚拟服务器的端口映射,这样我们访问linux服务器的端口就能映射到对应的容器来访问

        docker run --name=mynginx -d --restart=always -p 88:80 nginx

        -p 88:80

                88:linux主机上的端口

                80:nginx启动默认的端口

需要关闭对应的防火墙


修改容器内容

docker启动一个容器相当于在linux为其创建一个小linux:小型linux完整系统+容器软件的环境,因此可以进入这个小型linux系统来修改容器内容

进入容器:docker exec -it 容器id /bin/bash

        -it :以交互模式进入容器内部

        /bin/bash:进入容器的bash控制台

这个小型linux的内容可以在下载镜像时查看。

这时在访问88端口就发现nginx内容修改了


提交改变

当我们对容器进行修改后,如果该容器挂了,我们再次通过镜像创建容器时会发现,对之前容器的修改并不会在新容器上,意味着我们可能要重新修改。

为了防止这种情况,我们可以使用以下命令把修改后的容器提交到本地镜像中,当容器挂了时使用该镜像进行容器启动,这样以前的修改就能保存下来。

命令:docker commit -a "提交者" -m "提交信息" 容器id 镜像名:版本号 

 

这时之前对首页的修改不会出现

这时对首页的修改恢复了:


推送到远程仓库

提交改变只能在本机上恢复,当不同主机需要根据提交到本机的镜像来启动容器,可以用物理传输:把该镜像打包为压缩文件在发送给其他主机;也可以将该镜像推送到远程仓库中,另一台主机在到远程仓库中拉取到自己主机上并启动容器。

物理传输

打包命令:docker save -o 压缩文件名.tar 镜像名:版本号

发送命令:scp 压缩文件 目标主机:/路径

也可以使用工具来传输:如FinalShell。

另一台主机加载该镜像:

        docker load -i 压缩文件


推送远程仓库

在docker hub中注册登录账号,创建一个新仓库

使用命令:docker tag 本地镜像名:版本号 仓库名:版本号 ,将镜像复制一份,使镜像名格式正确

登录docker hub:docker login

推送:docker push 仓库名:版本号

推送完建议退出登录:docker logout

别的主机拉取:docker pull 仓库名:版本号


挂载数据

修改容器内容需要进入容器的虚拟服务器中,但可以将本机服务器的一个文件夹与虚拟服务器的文件夹关联,这样只需要修改本机服务器下文件夹就能修改容器内容。

docker run --name=mynginx \
-d --restart=always \
-p 88:80 -v /data/html:/usr/share/nginx/html:ro \
nginx

        -v:本机文件夹:容器文件夹:操作方式

               操作方式:ro:容器里边不能改

                                 rw:容器里边能改(默认)

如果本机文件夹为空,容器也为空(相当于覆盖)


docker日志

命令:docker logs 容器名/id


docker复制

将docker容器中的文件复制到本机或把本机文件复制到容器

命令:docker cp 容器id:容器文件路径   本机文件路径