今天学习一下之前面试被问到的docker的一些相关命令:
一。安装docker
1.卸载之前安装过的旧版本docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
2.如果电脑没有安装yum,可以用下列命令安装yum
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
3.配置docker安装镜像源:
默认yum命令回去国外的服务器上下载docker,速度太慢,所以我们需要更换一下docker安装的镜像源。
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
4.安装docker:
yum install -y docker-ce
-y 就是指在下载的过程中不管他问什么我们一路都选择yes
-ce是指下载的是社区免费版
5.启动docker前,一定要记得关闭防火墙
systemctl stop firewalld
//查看防火墙状态
systemctl status firewalld
6.启动docker
systemctl start docker
//重启docker
systemctl restart docker
//停止docker
systemctl stop docker
//查看docker状态
systemctl status docker
7.安装完成后,可以通过docker -v去查看docker的安装版本
docker -v
二。镜像操作
8.下拉镜像(不指定版本默认拉取最新版本)
docker pull nginx:1.23
9.查看docker已经拉取的镜像
docker images
//删除未使用的镜像
docker image prune
//镜像打包为文件
docker image save id号 -o name(名称:redis5.tar) 打包tar
//文件载入镜像
docker image load -i redis5.0.tar 将tar包 导入
10.修改镜像tag(镜像版本)
docker image tag b692a91e4e15 ng:11 //根据镜像id修改
按照上述操作执行完命令后docker images查看镜像会出现两个版本的镜像,如果我们rmi会报错(因为这两个镜像的id一样)
解决1 根据name和tag删除
docker rmi nginx:1.23
11.删除镜像
docker rmi ID
三。操作容器
12.创建容器
docker run --name 容器名字 -p 宿主机端口:容器端口 -d 镜像名称
13. 查看正在运行的镜像名称
docker ps
//强制查看所有没启动的容器
docker ps -a
14.进入容器
docker exec -it 容器名字
//用mysql容器举个例子(安装完成mysql后,我们需要进入容器输入账号密码才能连接上mysql)
docker exec -it mysql mysql -uroot -p123456
15.删除容器
docker rm 容器id
16.查看正在进行的容器名称
docker top 容器id
17.杀死一个正在运行的容器
docker kill 容器id
四。数据卷
首先我用自己的语言大致说一下数据卷的作用吧:
当docker中同时有两个容器同时需要一组数据,我们可以在这时候在本地先写一个文件,然后将本地的这个文件挂载到容器中的制定目录
18.在Docker中,可以使用-v
或--volume
标志将主机上的目录或文件挂载到容器中。如果你想要将一个指定的数据卷绑定到一个特定的容器,你可以使用以下命令:
docker run -d --name my-container -v /path/to/my/data:/path/in/container image-name
//-v 目录映射 宿主机不存在的目录可以自动创建
如果宿主机的目录存在并且有文件,会直接覆盖容器目录中的文件
在这个命令中,/path/to/my/data
是主机上的数据卷的路径,而/path/in/container
是你希望在容器内挂载该数据卷的路径。image-name
是你的容器镜像的名称。
19.复制文件到宿主机
docker cp /path/in/container image-name /path/to/my/data
五。具体案例(nginx)
下载nginx
docker pull nginx:1.23
启动nginx
docker run -p 8081:80 --name nginx1 -d nginx:1.23
创建挂载目录
# 创建挂载目录
mkdir -p /home/docker/nginx/conf
mkdir -p /home/docker/nginx/log
mkdir -p /home/docker/nginx/html
复制文件到宿主机
docker cp nginx1:/etc/nginx/nginx.conf /home/docker/nginx/conf/nginx.conf
docker cp nginx1:/etc/nginx/conf.d /home/docker/nginx/conf/conf.d
docker cp nginx1:/usr/share/nginx/html /home/docker/nginx/www
删除容器nginx1
docker rm -f nginx1
重新启动新容器nginx
docker run \
-p 8081:80 \
--name nginx \
-v /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/docker/nginx/logs:/var/log/nginx \
-v /home/docker/nginx/www:/usr/share/nginx/html \
-d nginx:1.23
上面的四个-v就是将本地的宿主机文件重新挂载到容器内并且持久化数据卷