@
目录目前我使用docker的场景的并不多,主要用来:
- 隔离本机的系统及软件环境,防止编译或者部署操作影响到本机
- 快速部署及配置软件环境不拖后接下来的工作
操作系统: Linux (ubuntu,debian,kali)
一、 docker 安装
sudo apt install docker.io
# 将要运行docker的用户加入到docker组,否则每次运行都要加sudo
sudo adduser ${USER} docker
sudo systemctl restart docker
# 重启以启用配置
sudo reboot
二、docker 使用
1. docker pull 拉取镜像
#自己决定版本 ubuntu:18.04 也可以
docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
bccd10f490ab: Pull complete
Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
2. docker run 后台运行
# 后台运行一个ubuntu镜像
docker run -itd --name myubuntu ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
Status: Downloaded newer image for ubuntu:latest
80e76ce3c7d2099ecb153b441f813a4b6b59b56a837797ce7cc502b5ce9b883e
3. docker ps 查看容器运行状态
# 后台运行一个ubuntu镜像
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80e76ce3c7d2 ubuntu "/bin/bash" About a minute ago Up About a minute myubuntu
4. docker exec 进入容器
使用 exec 选项,退出容器后,容器不会停止
若使用 docker attach myubunru
进入容器,退出容器后,容器会停止
# 使用容器的ID或者名字都可以
# docker exec -it 80e76ce3c7d2 /bin/bash
docker exec -it myubuntu /bin/bash
root@80e76ce3c7d2:/# ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
root@80e76ce3c7d2:/# cd
root@80e76ce3c7d2:~# ls
root@80e76ce3c7d2:~#
5. exit 退出容器
直接使用Ctrl + "d"
也可以
exit
6. docker restar 重启容器
docker restart myubuntu
7. docker stop 停止运行容器
docker stop myubuntu
8. docker stop 启动容器
停止可能会花费一些时间
docker stop myubuntu
9. docker stop 删除容器
删除之前需要先停止,否则会报错误
docker stop myubuntu
docker rm myubuntu
10. docker cp 复制文件(夹)进出容器
复制到容器的具体那个路径自行选择 不一定要复制到根目录:myubuntu:/
,如myubuntu:/root
# 复制进入容器
docker cp text.txt myubuntu:/
进入容器查看 test.log
在不在
docker exec -it myubuntu /bin/bash
# 从容器复制出来
docker cp myubuntu:/test.log .
三、Dockfile 简单使用
前面使用的是 DockerHub
中的 ubuntu
镜像,现在我们自己制作一个自定义的 ubuntu 镜像,里面预置了我们需要的软件包和一些其他的操作:
- FROM 指定基础镜像,用于后续的指令构建。
- RUN 在构建过程中在镜像中执行命令
- COPY 将文件或目录复制到镜像中
1. 准备
mkdir docker
cd docker
在创建的 docker 目录创建两个文件Dockerfile,test.log
test.log 只是为了使用 COPY 指令,将当前目录的文件复制到容器中,并不是必须的
#Dockerfile
FROM ubuntu:22.04
RUN apt-get update -y \
&& apt-get install -y \
curl \
python3 \
git \
wget
COPY ./test.log /
# 内容随意,只是为了复制
touch test.log
2. 开始构建镜像
docker build -t myubuntu_image .
3. 使用自定义镜像
docker run -itd --name myubuntu myubuntu_image /bin/bash
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1682e4914501 myubuntu_image "/bin/bash" 42 minutes ago Up 1 minutes myubuntu
进入容器查看,里面已经有了我们复制进来的 test.log
并且预先安装了软件包: git,wget,python3,curl
docker exec -it myubuntu /bin/bash
root@1682e4914501:/# ls
bin dev home lib32 libx32 mnt proc run srv test.log usr
boot etc lib lib64 media opt root sbin sys tmp var
4. 删除自定义的镜像
docker stop myubuntu
docker rm myubuntu
docker rmi myubuntu_image
Untagged: myubuntu_image:latest
Deleted: sha256:2127b529978e4ba134be19464c53d08bd01b822592db5fcaac1a0da014b13c26
Deleted: sha256:b561c76ca42a2e699693af790f2ba3638e7c1ec358a8b150465cb7b09c2ee2bb
Deleted: sha256:d562f8ca3124f08ffc952a27ed85c45b3ff887d48a051415628af667141a1630
Deleted: sha256:56e82a00763a8f08487f56f3eded2d5acbc6f755b5e7efbf2fe7722a6c449e33
至此,docker简单使用已完成
能力一般,水平有限,希望能帮到您