启动与停止
- 启动
# 启动docker
systemctl start docker
# 重启docker
systemctl restart docker
- 停止
systemctl stop docker
- 查看状态
systemctl status docker
- 设置开机自启动
systemctl enable docker
镜像相关命令
以centos为例
查看镜像
docker images
结果如下:
# REPOSITORY:镜像名称
# TAG:镜像版本
# IMAGE ID:镜像ID
# CREATED:镜像创建时间(不是下载时间)
# SIZE:镜像大小
zengyq@zengyq:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos 7 eeb6ee3f44bd 7 months ago 204MB
搜索镜像
docker search centos
拉取镜像
# 拉最新版本
docker pull centos
# 指定拉centos7
docker pull centos:7
删除镜像
# 删除指定镜像
docker rmi 镜像ID
# 删除所有镜像
docker rmi 'docker images -q'
容器相关命令
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
创建与启动容器
创建容器命令:
docker run
- 创建容器时常用的参数:
-i
:表示运行容器。-t
:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。--name
:为创建的容器命名。-v
:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。-d
:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i和-t两个参数,创建后就会自动进去容器)。-p
︰表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
交互式方式创建容器
# -it是把-i -t写在一起了,启动后进入容器
# /bin/bash表示启动后进入命令行
docker run -it --name centos centos:7 /bin/bash
运行结果如下:
zengyq@zengyq:~$ sudo docker run -it --name centos centos:7 /bin/bash
[root@aac814f0dad5 /]# ll
total 56
-rw-r--r-- 1 root root 12114 Nov 13 2020 anaconda-post.log
lrwxrwxrwx 1 root root 7 Nov 13 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Apr 23 12:54 dev
drwxr-xr-x 1 root root 4096 Apr 23 12:54 etc
...
守护方式创建容器
docker run -id --name centos2 centos:7
# 停止守护方式启动的容器
docker stop 容器ID
# 启动容器
docker start 容器ID
# 进入容器
sudo docker exec -it 容器名 /bin/bash
运行结果如下:
# CONTAINER ID:容器ID
# IMAGE: 镜像名及版本
# COMMAND:命令
# CREATED:创建时间
# STATUS:运行状态
# PORTS:端口映射
# NAMES:容器名称
zengyq@zengyq:~$ sudo docker run -id --name centos2 centos:7
83ad9387030677e8c056db4ca1119dd35150e4ef089ae4960e8013977b2c83f7
zengyq@zengyq:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83ad93870306 centos:7 "/bin/bash" 14 seconds ago Up 14 seconds centos2
aac814f0dad5 centos:7 "/bin/bash" 2 minutes ago Exited (0) About a minute ago centos
45c9c2d1cbef hello-world "/hello" 2 hours ago Exited (0) 2 hours ago modest_proskuriakova
zengyq@zengyq:~$ sudo docker exec -it centos2 /bin/bash
[root@83ad93870306 /]# ll
total 56
-rw-r--r-- 1 root root 12114 Nov 13 2020 anaconda-post.log
lrwxrwxrwx 1 root root 7 Nov 13 2020 bin -> usr/bin
...
拷贝文件
从宿主机拷贝至容器中:
docker cp 要拷贝的文件或目录 容器名称:容器目录
执行结果如下:
zengyq@zengyq:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 linux_c test.txt
zengyq@zengyq:~$ sudo docker cp test.txt 83ad93870306:/usr/local
zengyq@zengyq:~$ sudo docker exec -it 83ad93870306 /bin/bash
[root@83ad93870306 /]# cd /usr/local
[root@83ad93870306 local]# ls
bin etc games include lib lib64 libexec sbin share src test.txt
[root@83ad93870306 local]#
也可以将文件从容器中拷贝出来:
docker cp 容器名称:容器目录 要拷贝的文件或目录
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器添加-v
参数,后边为宿主机目录:容器目录,例如:
docker run -id -v /usr/local/mydata:/usr/local/mydata --name centos3 centos:7
运行结果如下:
zengyq@zengyq:~/mydata$ sudo docker run -id -v /usr/local/mydata:/usr/local/mydata --name centos3 centos:7
25beb18ad102b632da36d8f47809bc018eefdcd16e5c447bc610d116e61eca15
zengyq@zengyq:~$ cd /usr/local/mydata/
zengyq@zengyq:/usr/local/mydata$ ls
zengyq@zengyq:/usr/local/mydata$ sudo touch test.txt
zengyq@zengyq:/usr/local/mydata$ ls
test.txt
zengyq@zengyq:/usr/local/mydata$ sudo docker exec -it centos3 /bin/bash
[root@25beb18ad102 /]# cd /usr/local/mydata/
[root@25beb18ad102 mydata]# ls
test.txt
[root@25beb18ad102 mydata]#
删除容器
docker rm 容器名
迁移与备份
容器保存为镜像
我们可以通过以下命令将容器保存为镜像:
docker commit 容器 镜像名
执行结果如下:
zengyq@zengyq:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25beb18ad102 centos:7 "/bin/bash" 14 minutes ago Up 14 minutes centos3
83ad93870306 centos:7 "/bin/bash" 22 hours ago Up 36 minutes centos2
zengyq@zengyq:~$ sudo docker commit centos3 new_centos3
sha256:291800639e99df1360aa998b8c94ed66349af9ef0de15e675caad003ba1fe6e9
zengyq@zengyq:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_centos3 latest 291800639e99 9 seconds ago 204MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos 7 eeb6ee3f44bd 7 months ago 204MB
zengyq@zengyq:~$
镜像备份
我们可以通过以下命令将镜像保存为tar文件:
docker save -o 目标文件 镜像名
运行结果如下:
zengyq@zengyq:~$ sudo docker save -o new_centos3.tar new_centos3
zengyq@zengyq:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 linux_c new_centos3.tar
zengyq@zengyq:~$
镜像恢复与迁移
docker load -i 镜像备份的文件名
运行结果如下:
zengyq@zengyq:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 linux_c new_centos3.tar
zengyq@zengyq:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25beb18ad102 centos:7 "/bin/bash" 21 minutes ago Up 21 minutes centos3
83ad93870306 centos:7 "/bin/bash" 22 hours ago Up 42 minutes centos2
zengyq@zengyq:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_centos3 latest 291800639e99 6 minutes ago 204MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos 7 eeb6ee3f44bd 7 months ago 204MB
# 先删除原有镜像
zengyq@zengyq:~$ sudo docker rmi new_centos3
Untagged: new_centos3:latest
Deleted: sha256:291800639e99df1360aa998b8c94ed66349af9ef0de15e675caad003ba1fe6e9
Deleted: sha256:be904dfa157fe446f79e2e5fae346e3ca271cb0513771b60d51563fb3f6c4098
# 停止并删除原因容器
zengyq@zengyq:~$ sudo docker stop centos3
centos3
zengyq@zengyq:~$ sudo docker rm centos3
centos3
zengyq@zengyq:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83ad93870306 centos:7 "/bin/bash" 22 hours ago Up 44 minutes centos2
zengyq@zengyq:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos 7 eeb6ee3f44bd 7 months ago 204MB
zengyq@zengyq:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 linux_c new_centos3.tar
# 恢复镜像
zengyq@zengyq:~$ sudo docker load -i new_centos3.tar
13dadb8a8ff9: Loading layer 4.608kB/4.608kB
Loaded image: new_centos3:latest
zengyq@zengyq:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_centos3 latest 291800639e99 8 minutes ago 204MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
centos 7 eeb6ee3f44bd 7 months ago 204MB
# 运行刚刚恢复的镜像
zengyq@zengyq:~$ sudo docker run -id --name centos_again new_centos3
0ac1709316c1075400ef906455bb12502504ce75d69da82c9d1363dcac22ef3a
zengyq@zengyq:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ac1709316c1 new_centos3 "/bin/bash" 5 seconds ago Up 4 seconds centos_again
83ad93870306 centos:7 "/bin/bash" 22 hours ago Up 45 minutes centos2
zengyq@zengyq:~$
Dockerfile
什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像(操作级别的镜像,如centos镜像)并最终创建一个新的镜像。
- 对于开发人员:可以为开发团队提供个完全—致的开发环境;
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
- 对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像构建启动流程声(如果基础镜像不存在会优先拉取基础镜像,再执行相应的命令) |
MAINTAINER user_name | 声明镜像创建者(版权信息,不必要) |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
评论区