赞
踩
[root@laoliu src]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@laoliu src]#
表示docker服务已经启动
[root@laoliu ~]# docker login https://hub.someweb.com # 默认拉取镜像的命令格式 [root@laoliu ~]# docker pull hello-world Using default tag: latest Trying to pull repository docker.io/library/hello-world ... latest: Pulling from docker.io/library/hello-world 1b930d010525: Pull complete Digest: sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e Status: Downloaded newer image for docker.io/hello-world:latest # 从 国内站c.163.com 拉取nginx镜像, 当然, 使用第一种方式也OK [root@laoliu ~]# docker pull hub.c.163.com/library/nginx Using default tag: latest Trying to pull repository hub.c.163.com/library/nginx ... latest: Pulling from hub.c.163.com/library/nginx 5de4b4d551f8: Pull complete d4b36a5e9443: Pull complete 0af1f0713557: Pull complete Digest: sha256:f84932f738583e0169f94af9b2d5201be2dbacc1578de73b09a6dfaaa07801d6 Status: Downloaded newer image for hub.c.163.com/library/nginx:latest [root@laoliu ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest fce289e99eb9 4 months ago 1.84 kB hub.c.163.com/library/nginx latest 46102226f2fd 2 years ago 109 MB [root@laoliu ~]#
镜像运行起来之后,就是容器,此时可以向容器内部传输文件或重写某些文件, 但是:若容器被停止, 容器内部的文件及修改文件都将全部失效, 所以此种方式可用于测试容器的某些特性, 持久性的解决方案如下:
- 1. 编写Dockerfile (推荐), 在Dockerfile内使用相关命令给出解决方式
- 2. 使用docker commit 命令持久更新镜像
# 在docker下使用ubuntu运行echo命令并输出, 这条命令也做了pull的事情, [root@laoliu src]# docker run ubuntu echo hello world Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu 898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete 6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Status: Downloaded newer image for docker.io/ubuntu:latest hello world # docker 下运行nginx [root@laoliu src]# docker run nginx Unable to find image 'nginx:latest' locally Trying to pull repository docker.io/library/nginx ... latest: Pulling from docker.io/library/nginx 27833a3ba0a5: Pull complete ea005e36e544: Pull complete d172c7f0578d: Pull complete Digest: sha256:e71b1bf4281f25533cf15e6e5f9be4dac74d2328152edf7ecde23abc54e16c1c Status: Downloaded newer image for docker.io/nginx:latest [root@laoliu src]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest 27a188018e18 2 weeks ago 109 MB docker.io/hello-world latest fce289e99eb9 4 months ago 1.84 kB hub.c.163.com/library/nginx latest 46102226f2fd 2 years ago 109 MB # 注意: 现在有两个nginx, 因为下载源不一致导致的, 默认使用的docker.io下载的 # docker下再次运行nginx, 并将nginx的80端口映射为本地8080端口, 返回containerID [root@laoliu src]# docker run -p 8080:80 -d docker.io/nginx 738a4e2eee94b66f13d3d6cf1095b418f4148e904a482335f4a38c5b6a1b444b # docker下正在运行的进程 [root@laoliu src]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 738a4e2eee94 docker.io/nginx "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp hungry_kirch # 进入正在运行的容器中,并执行一些命令, 看起来像是进入了一个新的虚拟机中, 常用的shell命令都可以使用 [root@laoliu ~]# docker exec -it 738a4e2eee94 bash root@ae5ee342a38b:/# pwd / root@ae5ee342a38b:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@ae5ee342a38b:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx # 退出 容器编辑命令行 root@ae5ee342a38b:/# exit exit # 检查主机的8080端口 [root@laoliu ~]# netstat -na | grep 8080 tcp6 0 0 :::8080 :::* LISTEN # 停止某个正在运行的容器 [root@laoliu ~]# docker stop 738a4e2eee94
在浏览器中输入服务器地址:8080
, 看是否可以看到nginx的欢迎页面.
# 以下为测试docker中的nginx是否已经启动 [root@laoliu src]# cd /home/ [root@laoliu home]# vim index.html # 复制index.html 到docker中的nginx中的,以修改nginx的欢迎页面内容 [root@laoliu home]# docker cp index.html 738a4e2eee94://usr/share/nginx/html # 将复制后的index.html提交到image中 [root@laoliu home]# docker commit -m 'fun' 738a4e2eee94 nginx-fun sha256:13164158f600ff6630ea6cc330390acf3782ee594c861920094f0ba1c94574c3 # 下面的nginx-fun即是新生成的image [root@laoliu home]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx-fun latest 13164158f600 10 seconds ago 109 MB docker.io/nginx latest 27a188018e18 7 days ago 109 MB docker.io/ubuntu latest 94e814e2efa8 6 weeks ago 88.9 MB # 删除imageID=13164158f600的image [root@laoliu home]# docker rmi 13164158f600
ubuntu
和nginx
image, 结果就自动从远程pull最新的(base) lzh:opt mac$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc55bdb74522 jupyterhub/jupyterhub "jupyterhub" 21 hours ago Up 21 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
(base) lzh:opt mac$ docker-compose ps -a
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml
(base) lzh:opt mac$
docker命令 | docker-compose命令(效用等同于docker命令) | 用途 | docker命令示例 | 类比 |
---|---|---|---|---|
docker login | 登录docker hub站点 | docker login https://hub.docker.com, 可能由于墙的原因,未能成功登录 | ||
docker logout | 登出docker hub站点 | docker logout | ||
docker tag | 为docker镜像打tag | docker tag SOURCE_IMAG[:TAG] | git tag | |
docker push | 将镜像推送至hub站点 | docker push SOURCE_IMAG[:TAG] | git push | |
docker pull | 获取image | docker pull nginx | git pull | |
docker build | docker-compose build [–force-rm] 删除构建过程中的临时镜像 | 创建 image | docker build -t SOURCE_IMAG[:TAG] . | git add |
docker images | 列出所有的image | docker images | – | |
docker run | docker-compose up [-d] | 运行 container, [-d]添加参数后是指后台运行 | docker run -d -p 8080:80 docker.io/nginx | shell中的service start |
docker ps | docker-compose ps [-a] | 列出运行中的container | docker ps [-a] | shell中的ps |
docker start | dokcer-compose up [-d] | 启动的container, [-d]添加参数后是指后台运行 | docker start mysql8.0 | |
docker stop | docker-compose stop | 停止运行中的container | docker stop msyql | |
docker restart | docker-compose restart | 停止运行中的container | docker restart msyql | |
docker rm | 删除container | docker rm <container_id> | shell中的rm | |
docker rmi | 删除image | docker rmi -f <image_id> | shell 中的 rm -rf 强制删除 | |
docker cp | 在host和container之间拷贝文件 | docker cp <index.html> <container_id>://usr/share/nginx/html | shell中的cp | |
docker commit | 保存改动为新的image | docker commit -m “mark” <container_id> SOURCE_IMAG[:TAG] | git commit | |
docker exec | 进入容器并查看 | docker exec -it <container_id> /bin/bash | – | |
docker logs | docker-compose logs [-f] | 查看容器日志 | docker logs -f <container_name> | 实时查看容器日志 |
docker system prune | docker system prune | 用于清理Docker系统中的未使用资源,包括未使用的容器、镜像、网络和卷,以释放磁盘空间 | 可用于腾出磁盘空间 |
docker-compose 文件样例:
version: '3' services: backend: build: context: ./ # 重点关注 dockerfile: ./dev.Dockerfile # 重点关注 env: # 重点关注 容器内的环境变量,可用于配置用户名密码等 - MYSQL_ROOT_PASSWORD=my-secret-pw networks: - mynet logging: driver: "json-file" options: max-size: "100m" # limit log file size to 10 MB max-file: "5" # keep a maximum of 5 log files deploy: # 重点关注 resources: limits: cpus: '0.5' # 重点关注 限制 CPU memory: '256M'# 重点关注 限制内存大小 ports: - "7860:7860" # 重点关注 volumes: - ./:/app # 重点关注 command: bash -c "uvicorn langflow.main:app --host 0.0.0.0 --port 7860 --reload" # 重点关注 最好将启动命令放到 Dockerfile 中, 而不是 docker-compose 文件中。 frontend: build: context: ./src/frontend dockerfile: ./dev.Dockerfile args: - BACKEND_URL=http://backend:7860 # 重点关注 ports: - "3000:3000" volumes: - ./src/frontend/public:/home/node/app/public - ./src/frontend/src:/home/node/app/src - ./src/frontend/package.json:/home/node/app/package.json restart: on-failure # 重点关注
限制了之后, 部分 docker 版本可能存在限制不生效的问题, 那么需要使用
“docker-compose --compatibility up -d” 命令进行启动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。