第一节.docker的使用学习

最后更新于 2023-06-25 571 次阅读


1.docker安装

docker ps 查看进程

docker logs 进程ID :查看某个进程的日志

(1)CentOS

centos里有两种安装方法,第一种是直接yum

yum install docker

第二种是直接从官方脚本进行安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

(2)debian

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.容器安装

docker里边可以安装某些系统镜像来作为容器来进行使用,例如我们可以自行安装Ubuntu、或者debian来作为容器来运行某些镜像软件

(1)获取镜像

docker pull ubuntu
docker pull debian

通过pull命令,我们可以拉取某个我们想要的系统的镜像文件

(2)启动容器

命令:docker run [可选参数] images

例如:docker run -it ubuntu command(/bin/bash)

参数详解:

--name="Name" 容器名字 centos1 centos2区分容器

-it:启用交互式终端操作

-d:后台方式运行

-p:指定容器端口(例如-p 8080:8000)

-p ip:主机端口:容器端口

-p 主机端口:容器端口

ubuntu:镜像容器的名称,选择你想要启动的镜像

command:一个你希望执行的命令,这里我们想要有一个交互式的shell,所以我们使用/bin/bash

若是要退出终端,则输入:exit

(3)启动一个已经停止的容器

命令:docker start 容器ID

容器ID通过docker ps -la命令可以进行查询

(4)后台运行一个容器

通过加入参数【-d】,可以让一个容器在后台执行,若是要进入容器,需要使用指令【docker exec】

命令:docker run -itd --name ubuntu-test ubuntu /bin/bash

注意:如果使用docker run -d运行一个容器,倘若容器没有对外提供服务,或前台没有进程使用的话,docker会自动杀死该进程,使用docker ps 会看不到正在使用的容器信息

(5)停止/重启一个容器

命令:docker stop/restart 容器ID

(6)进入容器

在一个容器处于后台运行的情况下,我们可以使用两个命令【docker exec】或【docker attach】来进入某个容器

命令:docker exec -it 容器ID command(/bin/bash)

命令2:docker attach 容器id /bin/bash

※exec的方式是进入容器后开启一个新的终端,attach的方式是进入容器正在执行的终端

(7)退出容器

exit #退出并停止容器
​
ctrl + p + q #容器不停止直接退出

(8)删除容器

删除某一个容器的命令

命令:docker rm -f 容器ID

删除所有终止状态的容器的命令

命令:docker container prune

删除全部容器的命令

命令:docker rm -f $(docker ps -aq)

(9)列出所有运行的容器

#docker ps 命令

docker ps #列出当前在运行的容器

docker ps -a # 列出当前和历史中运行过的容器

docker ps -n=? #列出最近?次创建的容器

(10)查看容器运行日志

docker logs [option] 容器id
​
#相关option

-f ##类似tail -f,开启实时日志跟踪

-t ##显示时间戳

--tail number ##显示最近number条日志,例如 --tail 10
​

(11)查看容器内部进程信息

docker top 容器id

(12)查看容器信息(安装信息,存储信息,运行日志目录等)

docker inspect 容器id

(13)从容器内进行文件拷贝到主机

docker cp 容器id:容器内路径 目的主机路径

3.镜像(image)安装及使用

(1)获取应用的镜像

首先也是先通过pull命令获取我们的目标镜像,具体镜像的内容我们可以通过命令【 docker search 目标服务(httpd)】进行查询,也可以上docker hub进行查询https://hub.docker.com/

不过我们在运行容器时,如果使用的镜像不在本地中存在,则docker会自动从docker镜像仓库中进行下载

这里假设我们想安装nextcloud网盘服务,则我们需要先pull一下nextcloud的镜像

命令:docker pull nextcloud

(2)运行应用镜像

pull好镜像后我们就可以使用【docker run】命令来运行镜像了

命令:docker run -d -p 8888:80 -v /nextcloud nextcloud

参数详解:

-d:让镜像在后台运行

-p:指定服务映射的端口,前一个端口是服务器外部开放的端口,后一个端口是容器内部服务的端口,8888:80就是将外部8888端口映射到内部的80端口上,同时,我们也可以指定容器绑定的网络地址和协议(默认是tcp,udp的话直接在端口后方加入/udp),例如-p 127.0.0.1:8888:80/udp,这样我们就可以通过访问127.0.0.1:8888来访问容器内部80端口的服务

-P:容器内部端口随机的映射到外部端口

-v:建立一个docker的资料卷,并挂载到容器里,再一次run中可以多次使用挂载多个资料卷

可见服务已经启动

(3)查看应用的网络端口

命令:docker port 镜像ID/名字

可以快捷查询某个docker镜像的端口映射信息

左边是容器内服务的端口,右边是服务器的外部端口

(4)查看当前主机上的镜像

命令:docker images (-a(显示所有镜像信息)/-q(只显示镜像ID))

选项说明:

REPOSITORY:镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

(5)删除主机上的镜像

命令:docker rmi 镜像ID

例如:docker rmi 0a9d1f4c8f22

删除全部镜像:docker rmi -f $(docker images -qa)

(6)删除镜像的用户数据

由于直接删除docker的容器并不会直接删除本机上的镜像的用户数据,所以在删除镜像文件后,可能还要对镜像留下来的用户数据进行一个清理

首先我们可以查看一下当前系统上的所有docker的用户数据

命令:docker system df

然后为了安全地删除已停止的容器,未使用的网络和悬挂的图像,可以定时的进行修剪(prune)

命令:docker system prune

更极端的话,可以使用命令:docker system prune -a,删除所有以当前正在运行的镜像无关的镜像内容

(7)对Docker完整的清理

可以使用单个命令清除掉每个未使用的容器,镜像,卷和网络:

命令:docker system prune -a --volumes

如果要在没有确认提示的情况下强制清理,可以添加 -f 。 系统将恢复到没有任何 Docker 数据的原始状态

4.docker仓库管理

(1)注册docker仓库帐号

进入docker hub注册一个账户,然后在shell中输入:docker login进行docker账户的登录

登录账户后就可以进行镜像相关的查找、下载、以及同步

(2)搜寻相关镜像

命令:docker search 镜像名

(3)下载镜像

命令:docker pull 镜像名

例如:docker pull nextcloud

(4)同步推送镜像

可以使用docker push命令推送当前系统的docker镜像到docker hub的账户中

命令:docker tag nextcloud username/nextcloud(username替换成你的docker hub用户名)

docker push username/镜像名

然后可以通过docker search username/镜像名 查询你上传的镜像

5.docker资料管理

(1)建立资料卷

可以在【docker run】命令中使用参数【-v】来指定运行的镜像/容器的资料卷

例如:docker run -d -P --name web -v /webapp python app.py

(2)资料卷容器

如果有多个资料需要在多个容器之间被分享使用,这里建立我们建立资料卷容器,这就是一个专门负责存放资料卷的容器

①.首先创建一个容器 dbdata

例如:docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres

②.将其他镜像挂载在这个容器上

使用命令【--volumes-from】挂载dbdata容器中的资料卷

例如:docker run -d --volumes-from dbdata --name db1 training/postgres

docker run -d --volumes-from dbdata --name db2 traning/postgres

也可以从其他已经挂载了容器卷的容器来挂载资料卷

docker run -d --name db3 --volumes-from db1 training/postgres

③.备份资料卷

资料卷的备份要配合【tar】命令来进行使用,首先使用--volumes-from标记建立一个载入dbdata容器卷的容器,并从本地主机挂载当前到容器的/backup目录

命令:docker run -d --volumes-from dbdata -v $(pwd)/backup ubuntu tar cvf /backup/backup.tar /dbdata

容器启动后,使用了【tar】命令来备份dbdata的内容到/backup/backup.tar

④.还原资料卷

如果要恢复资料到一个容器,首先建立一个带有资料卷的容器dbdata2

命令:docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后建立另一个容器,挂载dbdata2的容器,并使用【tar】解压备份的档案到挂载的容器卷中

命令:docker run --volumes-from dbdata2 -v $(pwd)/backup busybox tar xvf /backup/backup.tar

6.docker命令小结

命令小结
#A:
attach    Attach to a running container  #当前shell下attach连接指定运行镜像

#B:
build     Build an image from a Dockerfile  #通过Dockerfile定制镜像

#C:
commit    Create a new image from a container's changes  #提交当前容器为新的镜像
cp    Copy files/folders from a container to a HOSTDIR or to STDOUT  #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container  #创建一个新的容器,同run 但不启动容器

#D:
diff    Inspect changes on a container's filesystem  #查看docker容器变化

#E:
events    Get real time events from the server#从docker服务获取容器实时事件
exec    Run a command in a running container#在已存在的容器上运行命令
export    Export a container's filesystem as a tar archive  #导出容器的内容流作为一个tar归档文件(对应import)

#H:
history    Show the history of an image  #展示一个镜像形成历史

#I:
images    List images  #列出系统当前镜像
import    Import the contents from a tarball to create a filesystem image  #从tar包中的内容创建一个新的文件系统映像(对应export)
info    Display system-wide information  #显示系统相关信息
inspect    Return low-level information on a container or image  #查看容器详细信息

#K:
kill    Kill a running container  #kill指定docker容器

#L:
load    Load an image from a tar archive or STDIN  #从一个tar包中加载一个镜像(对应save)
login    Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout    Log out from a Docker registry  #从当前Docker registry退出
logs    Fetch the logs of a container  #输出当前容器日志信息

#P:
pause    Pause all processes within a container#暂停容器
port    List port mappings or a specific mapping for the CONTAINER  #查看映射端口对应的容器内部源端口
ps    List containers  #列出容器列表
pull    Pull an image or a repository from a registry  #从docker镜像源服务器拉取指定镜像或者库镜像
push    Push an image or a repository to a registry  #推送指定镜像或者库镜像至docker源服务器

#R:
rename    Rename a container  #重命名容器
restart    Restart a running container  #重启运行的容器
rm    Remove one or more containers  #移除一个或者多个容器
rmi    Remove one or more images  #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run    Run a command in a new container  #创建一个新的容器并运行一个命令

#S:
save    Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search    Search the Docker Hub for images  #在dockerhub中搜索镜像
start    Start one or more stopped containers#启动容器
stats    Display a live stream of container(s) resource usage statistics  #统计容器使用资源
stop    Stop a running container  #停止容器

#T:
tag         Tag an image into a repository  #给源中镜像打标签
top       Display the running processes of a container #查看容器中运行的进程信息

#U:
unpause    Unpause all processes within a container  #取消暂停容器

#V:
version    Show the Docker version information#查看容器版本号

#W:
wait         Block until a container stops, then print its exit code  #截取容器停止时的退出状态值

7.常见错误解决方式

(1)docker启动WARNING:IPv4 forwarding is disabled. Networking will not work. 报错解决办法

centos 7 docker 启动了一个web服务 但是启动时报错:

WARNING: IPv4 forwarding is disabled. Networking will not work.

#需要做如下配置

解决办法:

vi /etc/sysctl.conf

net.ipv4.ip_forward=1 #添加这段代码

#重启network服务

systemctl restart network && systemctl restart docker

#查看是否修改成功 (备注:返回1,就是成功)

[root@docker-node2 ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1