侧边栏壁纸
博主头像
如此肤浅博主等级

但行好事,莫问前程!

  • 累计撰写 18 篇文章
  • 累计创建 8 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker | 基本操作

如此肤浅
2022-04-23 / 0 评论 / 0 点赞 / 178 阅读 / 6,251 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

启动与停止

  1. 启动
# 启动docker
systemctl start docker
# 重启docker
systemctl restart docker
  1. 停止
systemctl stop docker
  1. 查看状态
systemctl status docker
  1. 设置开机自启动
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 设置工作目录
0

评论区