Я пишу свой ответ, потому что некоторые люди могут быть более довольны простым примером реальной жизни без включения STL.
По какой-то причине у меня есть своя простая реализация только массива данных, и я хотел использовать диапазон основанный на цикле. Вот мое решение:
template <typename DataType>
class PodArray {
public:
class iterator {
public:
iterator(DataType * ptr): ptr(ptr){}
iterator operator++() { ++ptr; return *this; }
bool operator!=(const iterator & other) const { return ptr != other.ptr; }
const DataType& operator*() const { return *ptr; }
private:
DataType* ptr;
};
private:
unsigned len;
DataType *val;
public:
iterator begin() const { return iterator(val); }
iterator end() const { return iterator(val + len); }
// rest of the container definition not related to the question ...
};
Тогда пример использования:
PodArray<char> array;
// fill up array in some way
for(auto& c : array)
printf("char: %c\n", c);
Для сетей я всегда включаю в файл docker-compose спецификацию сети. Если сеть уже существует, докер не создаст новую.
version: '3'
services:
server:
image: app-dependencies
ports:
- "5003:80"
volumes:
- ./app:/app
command: python /app/app.py
restart: always
networks:
app_net:
ipv4_address: 172.18.0.5
networks:
app_net:
name: NETWORK_NAME
driver: bridge
ipam:
config:
- subnet: NETWORK_SUBNET
volumes:
VOLUME_NAME:
driver:local
И вам нужно будет добавить тома отдельно, чтобы соответствовать команде запуска докера.
Вы уверены, что вам нужен IP-адрес для контейнера? Это не рекомендуемая практика, почему вы хотите установить ее явно?
docker-compose.yml
version: '3'
services:
server: # correct, this would be container's name
image: webserver # this should be image name from your command line
ports:
- "5003:80" # correct, but only if you need to communicate to service from ouside
volumes: # volumes just repeat you command line, you can use Env vars
- $APP_PHOTO_DIR:/app/mysql-data
- $APP_CONFIG_DIR:/app/config
command: ["python", "/app/app.py"] # JSON notation strongly recommended
restart: always
Затем docker-compose up -d
и все. Вы можете получить доступ к своему сервису с хоста с помощью localhost:5003
, нет необходимости во внутреннем IP.