docker的那些事儿

1.docker 登录

cli:docker login {domain} or {ip address}

注意:如果执行docker login,不带域名或者ip地址,则默认登录https://hub.docker.com

 

2.docker编译镜像时,强制清掉本地旧的镜像缓存:

docker build --no-cache -t u12_core -f u12_core .

如果docker镜像占用本地太多存储空间,可以执行以下指令:

docker system prune -a --volumes

相关参考:Docker is filling up my disk space 

 

3.docker-compose相关

(1)docker-compose启动/停止/重启特定服务:

docker-compose -f /docker-compose/docker-compose-helloworld.yml start/stop/restart HTTP_IME

(2)docker-compose启动/停止一组服务:

启动: docker-compose -f /docker-compose/docker-compose-helloworld.yml up -d

停止: docker-compose -f /docker-compose/docker-compose-helloworld.yml

(3)如果docker-compose中包含的服务有些启动失败,此时可以通过以下命令查看相应服务的启动log:

docker-compose -f /docker-compose/docker-compose-helloworld.yml logs HTTP_IME

(4)docker-compose.xml目录挂载:

volumes:

- ../:/ime

- ../log:/ssd

即格式为:运行docker物理机待映射路径:docker镜像中的代码使用的路径

(5)如果docker服务端口需要外部访问,如(mysql和redis,测试环境需要在宿主机访问)记得使用ports设置映射:

image: mysql:5.7
ports:
  - '3306:3306'

相关参考:What is the difference between docker-compose ports vs expose

(6)docker-compose起来的mysql实例设置默认字符集:

加上command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerasdf
      MYSQL_DATABASE: docker_db
    restart: always
    volumes:
      - "/Users/hehe/docker_v/docker_test/db:/var/lib/mysql"
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

相关参考:How to change the default character set of mysql using docker-compose?

4.非root用户docker命令每次都需要sudo执行的解决方案

(1)创建docker组:sudo groupadd docker

(2)将当前用户加入docker组:sudo gpasswd -a ${USER} docker

(3)重启服务:sudo service docker restart

(4)刷新docker成员:newgrp - docker

*(5)记得reboot一下,否则新开一个terminal输入docker依然提示需要sudo

5.docker run同一个镜像时,如果指定container的名字(--name)相同,也即如果在一台机器上执行以下命令2次:

docker run  --name redis-1 redis:3

则会报错:“docker: Error response from daemon: Conflict. The container name "/redis-1" is already in use by container "5e46d5502ff04d1ef55077b183dd1e401c741811d7e07b951bf914cc92ca36b2". You have to remove (or rename) that container to be able to reuse that name.”

总结:如果需要一个机器上需要docker run同一个镜像多次,则需要给container指定不同的名字(或者不指定,使用默认的名字)

6.docker run使用--env 指定的环境变量值中包含特殊字符,如"!"或者"&"时,变量值应该用单引号包起来,而不是用双引号,如下:

docker run --env TEST_DATABASE_DSN='mysql://test:[email protected]:3306/test' registry.test.com:443/proj/test:master

相关参考:How to escape “!” and “&” in docker's environment varibles

你可能感兴趣的:(学习笔记,个人总结)