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
Comments NOTHING