Docker
Docker基本操作逻辑图
一、Docker镜像操作
Docker运行容器前需要本地存在对应的镜像,如果不存在的话,Docker就会尝试从默认镜像仓库 https://hub.docker.com下载,这是由Docker官方维护的一个公共仓库,可以满足用户的绝大部分需求,用户也可以通过配置来使用自定义的镜像仓库。
1.搜索镜像
[root@docker ~]# docker search dhcp
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
networkboot/dhcpd Suitable for running a DHCP server for your … 48 [OK]
joebiellik/dhcpd DHCP server running on Alpine Linux 18 [OK]
gns3/dhcp A DHCP container for GNS3 using dnsmasq 4 [OK]
modularitycontainers/dhcp-server ISC DHCP server 2 [OK]
instantlinux/dhcpd-dns-pxe Serve DNS, DHCP and TFTP from a small Alpine… 2 [OK]
......
参数 | 解释 |
---|---|
NAME | 镜像名称 |
DESCRIPTION | 镜像描述 |
STARS | 镜像星级 |
OFFICIAL | 是否官方创建 |
AUTOMATEO | 是否主动创建 |
PS:使用docker search dhcp只能查找镜像,镜像的标签无法查找,如果要查看镜像的标签,需要访问https://hub.docker.com进行查找
2.获取镜像
对于镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,既选择标签为latest,也可通过指定的标签来下载特定版本的某一镜像,这里的标签就是用来区分镜像版本的。
[root@docker ~]# docker pull docker.io/networkboot/dhcpd
Using default tag: latest
latest: Pulling from networkboot/dhcpd
898c46f3b1a1: Pull complete
63366dfa0a50: Pull complete
041d4cd74a92: Pull complete
6e1bee0f8701: Pull complete
114483241095: Pull complete
ef446bdcb1f0: Pull complete
Digest: sha256:fdc7ff6f265249a104f32f1d7aed0aedaf2f2fc62ea10eebf596e2af3b670477
Status: Downloaded newer image for networkboot/dhcpd:latest
3.查看镜像信息
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
networkboot/dhcpd latest 52cbff801df2 17 months ago 105MB
参数 | 解释 |
---|---|
REPOSITORY | 镜像属于的仓库 |
TAG | 镜像的标签信息,标记同一个仓库中的不同镜像 |
IMAGE ID | 镜像的唯一ID号,唯一标识了该镜像 |
CREATED | 镜像创建时间 |
SIZE | 镜像大小 |
可以根据ID号来获取镜像的详细信息
[root@docker ~]# docker inspect 52cbff801df2
[
{
"Id": "sha256:52cbff801df2c6e2da3866d9f9476f20f190f64a0e886fbdfa79d843befa666a",
"RepoTags": [
"networkboot/dhcpd:latest"
],
"RepoDigests": [
"networkboot/dhcpd@sha256:fdc7ff6f265249a104f32f1d7aed0aedaf2f2fc62ea10eebf596e2af3b670477"
],
......
PS:详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。
为本地的镜像添加自定义标签
[root@docker ~]# docker tag docker.io/networkboot/dhcpd dhcp:dhcp
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dhcp dhcp 52cbff801df2 17 months ago 105MB
networkboot/dhcpd latest 52cbff801df2 17 months ago 105MB
4.删除镜像
删除镜像有俩种方法:
- 使用镜像的标签删除镜像
- 使用镜像的ID删除镜像
语法:
[root@docker ~]# docker rmi qq:qq
Untagged: qq:qq
或者
[root@docker ~]# docker rmi 7e6257c9f8d8
Untagged: centos:7
Untagged: centos@sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Deleted: sha256:7e6257c9f8d8d4cdff5e155f196d67150b871bbe8c02761026f803a704acb3e9
Deleted: sha256:613be09ab3c0860a5216936f412f09927947012f86bfa89b263dfa087a725f81
5.存储镜像和载入镜像
导出镜像
[root@docker ~]# docker save -o dhcp.tar dhcp:dhcp
或
[root@docker ~]# docker save > dhcpd.tar dhcp:dhcp
[root@docker ~]# ls
dhcpd.tar dhcp.tar
载入镜像
[root@docker ~]# docker load -i dhcp.tar
Loaded image: dhcp:dhcp
或
[root@docker ~]# docker load < dhcpd.tar
Loaded image: dhcp:dhcp
6.上传镜像
上传到公共仓库,默认会上传到Docker Hub官方仓库。需要注册使用公共仓库的账号,可以使用dockerlogin命令来输入用户名、密码和邮箱来完成注册和登录,在上传之前需要给本地的镜像添加标签然后进行上传。
#登录docker Hub
[root@docker ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 3********1
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#上传到仓库
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/dhcp centos7.3 52cbff801df2 17 months ago 105MB
[root@docker ~]# docker push docker/dhcp:centos7.3
二、Docker容器操作
容器是Docker的领一个核心概念,简单来说,容器是镜像的一个运行实例,是独立运行的 一个或一组应用及他们所必须的运行环境,包括文件系统,系统类库、Shell环境等。镜像只是只读模板,而容器会给这个只读模板一个额外的可写层。
1.容器的创建
常用选项:
- -i:表示让容器的输入保持打开
- -t:表示让Docker分配一个伪终端
- -d:表示在后台运行这个容器
- –name:表示给容器命名
- –restart=always:表示始终保持运行(随着docker开启而运行)
- –rm :会随着退出容器的操作而删除容器
root@docker ~]# docker run -itd --name test1 centos:7
5582f02a94b70b57153c788cc4138991a7766f36dc4e7ec7f169d269737c29e9
或:
[root@docker ~]# docker create -it --name test2 centos:7
95004a70d03c285923257d86cf6270d7bbce91f0d9213fd3aa163c8e4eaff1f8
create创建容器完成之后,容器是created的状态。
PS:如果此处创建容器命令报错“WARNING: IPv4 forwarding is disabled. Networking will not work.”,就使用 vi 编辑器打开/usr/丨ib/sysctl.d/00- system.conf 文件,在其中添加net.ipv4.ip_forward=1, 然 后 使 用 service network start命令重启网络服务
查看容器(正在运行的)
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5582f02a94b7 centos:7 "/bin/bash" 7 minutes ago Up 7 minutes test1
查看容器(不在运行的)
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95004a70d03c centos:7 "/bin/bash" 9 minutes ago Created test2
5582f02a94b7 centos:7 "/bin/bash" 10 minutes ago Up 10 minutes test1
PS:显示容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射、容器名称等。
2.容器的运行
容器的开启和关闭,关键字不仅是可以用容器名称来指定,也可以用容器ID来控制开启关闭等。
开启
[root@docker ~]# docker start test2
test2
关闭
[root@docker ~]# docker stop test2
test2
重启
[root@docker ~]# docker restart test2
test2
挂起
[root@docker ~]# docker pause test2
test2
恢复
[root@docker ~]# docker unpause test2
test2
强制启动所有容器
同理,还可以有强制停止、重启、挂起等操作
[root@docker ~]# docker ps -a -q | xargs docker start
394b66ce30c4
3.容器的进入
[root@docker ~]# docker exec -it test1 /bin/bash
[root@5582f02a94b7 /]# exit
exit
或
[root@docker ~]# docker attach test1
[root@5582f02a94b7 /]# exit
exit
区别:
- 进入方式:
exec 进入的方式需要添加-i -t选项,后边还需要给容器一个shell环境。但attach就不需要这么麻烦,可以直接进入。- 退出状态:
exec 进入的方式: 如果执行exit退出,容器仍然保持运行。attach : 如果执行exit退出,容器会被关闭。如果想要保持容器不被关闭,可以使用键盘: Ctrl + p Ctrl + q 可以实现。- 本质上去区别:
exec 进入的方法,会生产新的进程。attach不会生产新进程。
4.容器的导出和导入
语法:
容器在运行和停止状态都可以导出
docker export 容器 ID/名称>文件名
导出95004a70d03c容器到文件beifen下
[root@docker ~]# docker export 95004a70d03c>beifen
[root@docker ~]# ls[root@docker ~]# ls -l beifen
-rw-r--r-- 1 root root 211081216 8月 28 17:57 beifen
将导出的文件beifen文件成为本地镜像
[root@docker ~]# cat beifen | docker import - beifen:111
sha256:3b62405721d512baa1a1998ce16a8533d19a8bd9fc14b3c94e47658d4202bb3a
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
beifen 111 3b62405721d5 10 seconds ago 203MB
把容器直接制作成镜像
[root@docker ~]# docker commit test1 test:1.10
sha256:fbd634954fec30e4188a0ef658c182921c22c6fe26109b0603cf90b2316a13ee
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1.10 fbd634954fec 5 seconds ago 311MB
5.容器的删除
删除容器之前先把容器停止
[root@docker ~]# docker rm test1
test1
如果要删除一个正在运行的容器,添加-f选项强制删除
[root@docker ~]# docker rm -f test2
test2
强制删除所有容器(声场环境禁止使用)
[root@docker ~]# docker ps -a -q | xargs docker rm -f
4083bff845ca
6.宿主机与容器之间互相传东西
[root@docker ~]# docker run -itd --name test1 centos:7
4083bff845cabc18391677731b94633ebb64681144873c34f1be6833d4e2b1ee
[root@docker ~]# docker cp dhcp.tar test1:/root //互传东西
#登录容器test1查看是否互传成功
[root@docker ~]# docker exec -it test1 /bin/bash
[root@4083bff845ca /]# cd /root
[root@4083bff845ca ~]# ls
anaconda-ks.cfg dhcp.tar