docker及docker-compose 常用命令总结及其解析

0 强烈推荐的docker学习网站

docker 从入门到实战

1. 启动docker服务

[root@laoliu src]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@laoliu src]#

表示docker服务已经启动

2. 拉取镜像:

[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 ~]# 


2. 使用docker运行镜像

镜像运行起来之后,就是容器,此时可以向容器内部传输文件或重写某些文件, 但是:若容器被停止, 容器内部的文件及修改文件都将全部失效, 所以此种方式可用于测试容器的某些特性, 持久性的解决方案如下:
- 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
  • 本地没有ubuntunginximage, 结果就自动从远程pull最新的
    命令小结
    docker-compose 一般运行在含有’docker-compose.yml’文件的目录下., 其它目录下,docker-compose运行不成功.
(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镜像打tagdocker tag SOURCE_IMAG[:TAG]git tag
docker push将镜像推送至hub站点docker push SOURCE_IMAG[:TAG]git push
docker pull获取imagedocker pull nginxgit pull
docker builddocker-compose build [–force-rm] 删除构建过程中的临时镜像创建 imagedocker build -t SOURCE_IMAG[:TAG] .git add
docker images列出所有的imagedocker images
docker rundocker-compose up [-d]运行 container, [-d]添加参数后是指后台运行docker run -d -p 8080:80 docker.io/nginxshell中的service start
docker psdocker-compose ps [-a]列出运行中的containerdocker ps [-a]shell中的ps
docker startdokcer-compose up [-d]启动的container, [-d]添加参数后是指后台运行docker start mysql8.0
docker stopdocker-compose stop停止运行中的containerdocker stop msyql
docker restartdocker-compose restart停止运行中的containerdocker restart msyql
docker rm删除containerdocker rm <container_id>shell中的rm
docker rmi删除imagedocker rmi -f <image_id>shell 中的 rm -rf 强制删除
docker cp在host和container之间拷贝文件docker cp <index.html> <container_id>://usr/share/nginx/htmlshell中的cp
docker commit保存改动为新的imagedocker commit -m “mark” <container_id> SOURCE_IMAG[:TAG]git commit
docker exec进入容器并查看docker exec -it <container_id> /bin/bash
docker logsdocker-compose logs [-f]查看容器日志docker logs -f <container_name>实时查看容器日志
docker system prunedocker 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: '1' # 重点关注 限制 CPU
          memory: '1gb'# 重点关注 限制内存大小
        reservations:
          cpus: '0.5'  # 预留配置
          memory: '512m'  # 预留配置
    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” 命令进行启动backendfrontend两个服务。
  • “docker-compose --compatibility up -d backend ” 命令,则只启动backend一个服务。
  • “docker-compose -f docker-compose-dev.yml --compatibility up -d backend ” 命令,则只启动docker-compose-dev.yml 中的backend一个服务。

一个小问题:

在编写 Dockerfile 和 docker-compose.yml 中, 都可以使用 ENV 来设置环境变量, 如果存在同样的环境变量名,但环境变量的值不一样, 那谁的优先级更高呢? 或者说最终系统中用到的是哪个文件中的环境变量?
答: 如果 docker-compose.yml 中定义了与 Dockerfile 中同名的环境变量,则在容器启动时将使用 docker-compose.yml 中的值。如果 docker-compose.yml 中没有定义,则使用 Dockerfile 中的值。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker是一种容器化技术,可以在不同的操作系统上运行应用程序。Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。 以下是一些常用DockerDocker Compose命令: ### Docker - `docker run`: 运行一个Docker容器。 - `docker ps`: 列出正在运行的Docker容器。 - `docker images`: 列出所有本地镜像。 - `docker build`: 使用Dockerfile构建一个Docker镜像。 - `docker push`: 将本地镜像上传到Docker Hub或其他Docker镜像仓库。 - `docker pull`: 从Docker Hub或其他Docker镜像仓库中下载一个镜像。 - `docker rm`: 删除一个或多个Docker容器。 - `docker rmi`: 删除一个或多个本地Docker镜像。 ### Docker Compose - `docker-compose up`: 构建并启动一个Docker Compose应用。 - `docker-compose down`: 停止并删除一个Docker Compose应用。 - `docker-compose ps`: 列出正在运行的Docker Compose服务。 - `docker-compose logs`: 查看一个Docker Compose服务的日志。 - `docker-compose exec`: 在一个Docker Compose服务中执行一个命令。 - `docker-compose build`: 构建一个Docker Compose服务的镜像。 - `docker-compose pull`: 下载一个Docker Compose服务的镜像。 ### Docker Compose配置文件 Docker Compose使用YAML格式的配置文件来定义多容器Docker应用程序。以下是一个示例配置文件: ``` version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" ``` - `version`: 定义配置文件使用的Docker Compose版本。 - `services`: 包含一个或多个Docker容器服务的列表。 - `build`: 构建一个Docker镜像。 - `image`: 使用现有的Docker镜像。 - `ports`: 映射容器端口到主机端口。在此示例中,容器的5000端口将映射到主机的5000端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值