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